The get_page_children() WordPress PHP function identifies descendants of a given page ID in a list of page objects.
Usage
To use get_page_children(), provide the page ID and an array of WP_Post objects:
$descendants = get_page_children($page_id, $pages);
Parameters
$page_id (int)– Required. The page ID for which to find descendants.$pages (array of WP_Post objects)– Required. List of page objects from which descendants should be identified.
More information
See WordPress Developer Resources: get_page_children()
Examples
Find children of a specific page by title
Find the child pages of a page titled “Portfolio”:
// Set up the objects needed
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page'));
// 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);
// Output the result
echo '<pre>' . print_r($portfolio_children, true) . '</pre>';
Find children of a custom post type
Find child posts of a custom post type called “locations”:
$location_parent_id = /* Parent Location ID */;
// Query the locations post type
$all_locations = get_pages(array(
'post_type' => 'locations',
'post_status' => array('publish', 'pending')
));
// Find the children of the parent location
$inherited_locations = get_page_children($location_parent_id, $all_locations);
// Output the result
echo '<pre>' . print_r($inherited_locations, true) . '</pre>';
Find children of a page with a specific ID
$page_id = 42;
$all_wp_pages = get_pages();
$children = get_page_children($page_id, $all_wp_pages);
// Output the result
foreach ($children as $child) {
echo $child->post_title . '<br>';
}
Retrieve grandchildren of a specific page
$parent_page_id = 123;
$all_wp_pages = get_pages();
$children = get_page_children($parent_page_id, $all_wp_pages);
$grandchildren = array();
foreach ($children as $child) {
$grandchildren = array_merge($grandchildren, get_page_children($child->ID, $all_wp_pages));
}
// Output the result
foreach ($grandchildren as $grandchild) {
echo $grandchild->post_title . '<br>';
}
Find and display all descendants of a specific page
function get_all_descendants($page_id, $pages) {
$descendants = get_page_children($page_id, $pages);
foreach ($descendants as $descendant) {
$descendants = array_merge($descendants, get_all_descendants($descendant->ID, $pages));
}
return $descendants;
}
$parent_page_id = 987;
$all_wp_pages = get_pages();
$all_descendants = get_all_descendants($parent_page_id, $all_wp_pages);
// Output the result
foreach ($all_descendants as $descendant) {
echo $descendant->post_title . '<br>';
}