web-dev-qa-db-fra.com

Teste si la page est enfant et a des enfants, le cas échéant, renvoie également les pages enfants aux pages des petits-enfants

J'essaie de montrer un sous-menu de pages enfants uniquement sur les pages de niveau 2 (qui ont un parent) et s'ils ont des enfants. J'utilise le code ci-dessous (composé de plusieurs extraits que j'ai trouvés), cela fonctionne bien au niveau 1 (ne montre rien de ce qui est censé être), fonctionne bien au niveau 2: s'il y a des pages enfants, elles sont affichées dans le sous-menu. .

Ma question: quand je vais au niveau 3 pages, j'aimerais que le sous-menu reste, mais il disparaît. Comment puis-je changer le code ci-dessous pour le faire fonctionner?

    <?php 
        if (is_page() && $post->post_parent ) { // test to see if the page has a parent

          $page = $post->ID;

          if (is_page() ) {
            $page = $post->post_parent;
          }

          $children=wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );


          if ($children) {
            $output = wp_list_pages( array(
                'child_of' => $post->ID, // Only pages that are children of the current page
                'depth' => 1, // Only show one level of hierarchy
                'title_li' => ''
            ) );
          }


        } 

echo $output; 

?>
3
xarai

Utilisez ancêtres :

$ancestors = array_reverse( get_post_ancestors( $post->ID ) ); // reverse ancestors to make it more intuitive

if ( isset( $ancestors[0] ) ) {

    if ( isset( $ancestors[1] ) ) {
        // 3rd tier
        $parent_id = $post->post_parent;
    } else {
        // 2nd tier
        $parent_id = $post->ID;
    }

    $args = array(
        'depth' => 1,
        'child_of' => $parent_id,
    );

    wp_list_pages( $args );
}
2
vancoder