web-dev-qa-db-fra.com

Montrer les frères et sœurs (le cas échéant) et les parents

Ma question concerne l'affichage des parents et des frères et soeurs de la page actuelle.

Si je suis au niveau 2 page, je voudrais montrer aux frères et sœurs sans leurs enfants. Si je suis au niveau 3 page, je voudrais montrer frères, frères et sœurs.

Par exemple, si j'avais des niveaux de page comme celui-ci:

Animaux (niveau 1)
- Poisson (niveau 2)
- Saumon (niveau 3)
-- Truite
- Brochet
- Mammifères
-- Chiens
-- Chats
Les plantes

Si je suis sur la page Poisson, j'aimerais montrer aux frères et sœurs:

Poisson
Mammifères

Si je suis sur la page Saumon, je voudrais montrer aux frères et sœurs, aux parents et aux parents:

Poisson
- Saumon
- Truite
- Brochet
Mammifères

Mon code actuel ressemble à ceci:

<?php
if($post->post_parent)
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0&sort_column=menu_order");
else $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0&sort_column=menu_order");
if ($children) { ?>
<ul><?php echo $children; ?></ul>
<?php } ?>
1
Markus Ossi

En l'état actuel, votre code fonctionne presque, mais il vérifie si la page actuelle a un parent, ce qui sera toujours vrai pour les pages de 2e et de 3e niveau.

WordPress nous donne get_ancestors pour récupérer un tableau ordonné d'ancêtres pour tout type d'objet hiérarchique:

get_ancestors( $object_id, $object_type );

Nous pouvons donc utiliser get_ancestors( $post->ID, 'page' ) et compter les éléments pour nous aider à obtenir la profondeur appropriée pour votre navigation.

if($post->post_parent) {

    $ancestors = get_ancestors( $post->ID, 'page' );

    if ( 1 == count( $ancestors ) ) {

            echo '<ul>';

            wp_list_pages(
                array (
                    'title_li' => '',
                    'sort_column' => 'menu_order',
                    'child_of' => $ancestors[0],
                    'depth' => 1
                ) 
            );

            echo '</ul>';

    }

    if ( 2 == count( $ancestors ) ) {

            echo '<ul>';

            wp_list_pages(
                array (
                    'title_li' => '',
                    'sort_column' => 'menu_order',
                    'child_of' => $ancestors[1],
                    'depth' => 2
                ) 
            );

            echo '</ul>';

    }


}

Vous pourriez être plus intelligent avec la logique, en supprimant le dernier élément du tableau ancêtre par exemple, mais je l'ai gardé détaillé pour plus de clarté.

1
Andy Macaulay-Brook