web-dev-qa-db-fra.com

Étant donné l'identifiant de la page, vérifiez s'il a des enfants

J'ai besoin de lister les sous-pages, étant donné l'identifiant du parent. J'ai essayé comme suit:

if ($children = get_pages(array('child_of' => $post->ID)) && !empty($children)) {
    //Do stuff here
}

Mais cela retourne de toute façon faux.

J'ai aussi essayé get_page_children($post->ID, array), mais je pense que je n'ai pas vraiment compris comment cette fonction fonctionne.

Alors, est-il possible d'avoir des enfants d'une page? Je vous remercie.

3
Daniele Squalo

L'exemple tiré du WP codex pour get_page_children fait ce que vous recherchez avec une page intitulée "Portfolio":

$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page', 'posts_per_page' => '-1'));

// Get the page as an Object
$portfolio =  get_page_by_title('Portfolio');

// Filter through all pages and find Portfolio's children
$portfolio_children = get_page_children( $portfolio->ID, $all_wp_pages );

La première partie initialise un nouveau WP_Query, puis l’utilise pour interroger toutes les pages et les renvoyer sous forme d’objets définis avec la variable $all_wp_pages.

get_page_children a besoin de deux arguments: l'ID de la page parent et la liste des objets de pages dans lesquels rechercher les enfants de cette page (la variable $all_wp_pages ci-dessus).

Pour que votre exemple fonctionne, vous avez besoin de cette liste d'objets créés par la requête ($all_wp_pages) sous la forme get_page_children n'interroge pas la base de données, mais vérifie plutôt cette liste .

Donc, get_page_children($post->ID, $all_wp_pages)

En entier:

$page_id = $post->ID;
$my_wp_query = new WP_Query();

$all_wp_pages = $my_wp_query->query(array('post_type' => 'page', 'posts_per_page' => '-1'));

$the_pages_children = get_page_children( $page_id, $all_wp_pages );
2
hwl