web-dev-qa-db-fra.com

Détecter si la page personnalisée de 1er, 2ème ou 3ème niveau?

J'ai un type de message personnalisé qui est hiérarchique. J'ai 3 niveaux de pages, j'ai besoin d'un moyen de détecter si je suis au plus haut niveau, 2e niveau ou 3e niveau. J'ai examiné cette question et ne peux trouver que des exemples qui fonctionnent avec is_page () mais apparemment, cela ne fonctionne pas avec les CPT.

function nldf_gallery() {
    $labels = array(
        'name'               => 'NLDF',
        'singular_name'      => 'NLDF',
        'add_new'            => 'Add New',
        'add_new_item'       => 'Add New NLDF',
        'edit_item'          => 'Edit NLDF',
        'new_item'           => 'New NLDF',
        'all_items'          => 'All NLDF',
        'view_item'          => 'View NLDF',
        'search_items'       => 'Search NLDF',
        'not_found'          => 'No NLDF found',
        'not_found_in_trash' => 'No NLDF found in Trash',
        'menu_name'          => 'NLDF'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'hierarchical'       => true,
        'has_archive'        => false,
        'menu_position'      => 4,
        'menu_icon'          => 'dashicons-format-gallery',
        'supports'           => array('title','editor','comments','revisions','page-attributes')
    );

    register_post_type('nldf', $args);

}
add_action('init', 'nldf_gallery');

OU - Une façon d'utiliser un modèle différent pour chaque niveau de pages

1
RiddleMeThis

Vous pouvez appeler https://codex.wordpress.org/Function_Reference/get_ancestors dans votre modèle. Cela va retourner un tableau d'ancêtres à votre publication actuelle et vous pouvez utiliser la longueur du tableau pour voir à quelle profondeur vous êtes dans votre hiérarchie.

Utilisez-le en haut de votre fichier de modèle pour définir une variable $ post_depth et utilisez-le pour ajuster votre classe body pour la CSS ciblée ou pour inclure des parties de modèle de manière conditionnelle.

Quelque chose comme ça marcherait:

<?php

// single-nldf.php
// Template for displaying single NLDFs

$level = count( get_ancestors( get_queried_object_id(), 'nldf' ) );

add_filter('body_class','nldf_page_class_names');
function nldf_page_class_names($classes) {
    // add 'class-name' to the $classes array
    $classes[] = 'single-nldf-' . $level;
    // return the $classes array
    return $classes;
}

get_header( 'nldf-' . $level );
// loads header-nldf-0.php, header-nldf-1.php or header-nldf-2.php

get_template_part( 'loop', 'nldf-' . $level );
// loads loop-nldf-0.php, loop-nldf-1.php or loop-nldf-2.php

get_footer( 'nldf-' . $level );
// loads footer-nldf-0.php, footer-nldf-1.php or footer-nldf-2.php

Pour plus de robustesse, vous pouvez rechercher des publications imbriquées dans des niveaux plus profonds et effectuer une action appropriée.

1