web-dev-qa-db-fra.com

Créer des sous-pages

J'aimerais avoir la possibilité de créer des "sous-pages simples" pour afficher le contenu détaillé dans un type d'article personnalisé. Existe-t-il un moyen de générer des pages, avec un modèle spécifique avec une URL de ce type:

domain.com/custom-post-type-slug/single-slug/sub-single-slug/

Remarque: j'ai besoin de plusieurs sous-pages pour chaque section de mon message (contenu ajouté via ACF). Le slug n'a pas besoin d'être dynamique car toutes mes sections sont les mêmes pour chaque post.

Je vous remercie!

2
William Ode

Voici la solution (Origine: http://www.placementedge.com/blog/create-post-sub-pages/ )

// Fake pages' permalinks and titles. Change these to your required sub pages.
$my_fake_pages = array(
    'reviews' => 'Reviews',
    'purchase' => 'Purchase',
    'author' => 'Author Bio'
);

add_filter('rewrite_rules_array', 'fsp_insertrules');
add_filter('query_vars', 'fsp_insertqv');

// Adding fake pages' rewrite rules
function wpse_261271_insertrules($rules)
{
    global $my_fake_pages;

    $newrules = array();
    foreach ($my_fake_pages as $slug => $title)
        $newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?books=$matches[1]&fpage=' . $slug;

    return $newrules + $rules;
}

// Tell WordPress to accept our custom query variable
function wpse_261271_insertqv($vars)
{
    array_Push($vars, 'fpage');
    return $vars;
}

// Remove WordPress's default canonical handling function

remove_filter('wp_head', 'rel_canonical');
add_filter('wp_head', 'fsp_rel_canonical');
function wpse_261271_rel_canonical()
{
    global $current_fp, $wp_the_query;

    if (!is_singular())
        return;

    if (!$id = $wp_the_query->get_queried_object_id())
        return;

    $link = trailingslashit(get_permalink($id));

    // Make sure fake pages' permalinks are canonical
    if (!empty($current_fp))
        $link .= user_trailingslashit($current_fp);

    echo '<link rel="canonical" href="'.$link.'" />';
}

N'oubliez pas de rincer vos permaliens! Allez dans Paramètres> Permaliens> Enregistrer pour vider

0
William Ode

Tout d’abord, vous devez enregistrer le type de publication personnalisé afin qu’il soit hiérarchisé, c’est-à-dire qu’une publication peut avoir une publication parent.

Après cela, vous devez vous assurer que votre structure de lien permanent est définie sur example.com/%postname%/.

Une fois que vous avez cela, il vous suffit de créer une publication personnalisée pour enfant nommée sub-single-slug et de définir single-slug en tant que parent à partir de Page Attribute (assurez-vous que la case est cochée dans Screen Options). C'est tout. Maintenant, votre article sub-single-slug aura la structure de lien en tant que example.com/custom-post-type/single-slug/sub-single-slug/.

Par exemple, j'enregistre le type de message personnalisé comme suit:

function wpse_register_custom_post_type() {

    $labels = array(
        "name" => __( 'custom post type', 'text-domain' ),
        "singular_name" => __( 'custom post types', 'text-domain' ),
    );

    $args = array(
        "label" => __( 'custom post type', 'text-domain' ),
        "labels" => $labels,
        "description" => "",
        "public" => true,
        "publicly_queryable" => true,
        "show_ui" => true,
        "show_in_menu" => true,
        "capability_type" => "post",
        "map_meta_cap" => true,
        "hierarchical" => true,
        "rewrite" => array( "slug" => "custom_post_type", "with_front" => true ),
        "query_var" => true,
        "supports" => array( "title", "editor", "thumbnail", "custom-fields", "page-attributes" ),
        "taxonomies" => array( "category", "post_tag" ),
    );

    register_post_type( "custom_post_type", $args );
}

add_action( 'init', 'wpse_register_custom_post_type' );
3
Scott