web-dev-qa-db-fra.com

limiter dynamiquement la profondeur de wp_list_pages

Je suppose que cela devrait être facile, mais je n’ai pas encore trouvé la solution appropriée.

Je veux limiter la profondeur de wp_list_pages afin de ne pas afficher les pages du dernier niveau. Donc, en supposant que la page parente A comporte 3 niveaux de pages, je souhaite uniquement répertorier les 2 premiers niveaux. Je cherchais une fonction permettant de compter la profondeur maximale d'enfants pour une page, mais sans succès.

Jusqu'à présent, mon code est

$parents = get_post_ancestors($post->ID);
if (count($parents)>1) {
    $parent = $parents[count($parents)-2];
} else  {
    $parent = $post->ID;
}

$args = array(
        'depth'        => 0,  // this should be set dynamically
        'child_of'     => $parent,
        'sort_column'  => 'menu_order, post_title',
        'post_type'    => 'page',
        'post_status'  => 'publish'
    ); 

wp_list_pages( $args );

Toute aide est grandement appréciée

2
vadims

C'est un peu délicat et ma solution peut ne pas être la meilleure pour la performance. Vous pouvez ajouter cette valeur en tant que champ personnalisé à la page, de sorte que vous n'avez pas à l'interroger à chaque fois.

// get the ancestors of the page, and check if the page is toplevel
$parent = array_reverse( get_post_ancestors( $post->ID ) );
if ( isset( $parent[0] ) ) {
    $toplevel = $parent[0];
} else {
    $toplevel = $post->ID;
}

// get the children of this toplevelpage
$children = get_page_hierarchy( get_pages(), $toplevel );
$depth = 0;
foreach ( $children as $child => $slug ) {

    // check how many ancestors this page has
    $count = count( get_ancestors( $child, 'page' ) );
    // if more than the current depth, set the depth to the new value
    if ( $count > $depth ) {
        $depth = $count;
    }

}
echo $depth; //total depth below this toplevelpage, you can delete this part afterwards

$depth_without_last = $depth - 1;

Il suffit d'insérer la varible au lieu du 0 dans la depth dans votre $args, cela devrait fonctionner :)

1
fischi