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
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 :)