web-dev-qa-db-fra.com

comment lister correctement les pages enfants dans la barre latérale?

Le menu de mes pages a une profondeur maximale de 3 niveaux et j'ai du mal à comprendre comment répertorier correctement les pages enfants dans la barre latérale.

Si une page est un parent, je souhaite répertorier ses pages enfants directes et le titre doit être ce parent.

Si une page est un enfant ET a des enfants, je souhaite énumérer uniquement ses enfants et le titre doit être cette page.

Si une page est un petit-enfant, je veux énumérer ses frères et sœurs et le titre devrait être ce petit-enfant.

Pour l'instant j'utilise (du Codex):

<?php if($post->post_parent) {
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0&depth=1&sortcolumn=menuorder");
} else {
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0&depth=1&sortcolumn=menuorder");
}
?>
<?php if ($children) { ?>
<div class="left-bar-content">
<h2><?php _e('More ','sunchine') ?><?php echo get_the_title($post->post_parent);?></h2>
<ul class="leftbar-list">
<?php echo $children;?>
</ul>
</div><!-- .left-bar-content -->
<?php
}
?>

Et c'est presque correct. Presque, parce que ça ne fait pas mon 2ème critère.

Le Codex a une multitude d’options, mais je ne peux pas déterminer laquelle serait applicable à ce que je veux accomplir. L'utilisation de widgets et/ou d'un plugin n'est pas une option.

Toute aide est très appréciée.

2
user2015

Voici le code qui répond à toutes vos 3 exigences ci-dessus.

<?php
/*
 * get_page_depth
 * Gets the page depth, calls get_post on every iteration
 * https://Gist.github.com/1039575
 */
if ( !function_exists( 'get_page_depth' ) ) {
function get_page_depth( $id=0, $depth=0 ) {
    global $post;

    if ( $id == 0 ) 
        $id = $post->ID;

    $page = get_post( $id );
    if ( !$page->post_parent ) {
            // this page does not have any parent
            return $depth;
    }
    return get_page_depth( $page->post_parent, $depth+1 );
}
}

$target_page = get_page_depth( $post->ID ) > 1 ? $post->post_parent : $post->ID;
$children = wp_list_pages("title_li=&child_of={$target_page}&depth=1&echo=0&sort_column=menu_order");

?>

<div class="left-bar-content">
    <h2><?php _e('More ','sunchine'); ?><?php echo get_the_title( $target_page ); ?></h2>
    <ul class="leftbar-list">
        <?php echo $children; ?>
    </ul>
</div><!-- .left-bar-content -->
1
Hameedullah Khan