# Функция GET_PAGE_CHILDREN() в WordPress 1.5.1
Функция get_page_children() используется для нахождения дочерних страниц определённой страницы в массиве объектов страниц. Это особенно полезно, если вы хотите увидеть все страницы, которые относятся к данной родительской странице.
## Что такое дочерние страницы?
Дочерние страницы — это страницы, которые находятся под определённой родительской страницей и имеют её в качестве родителя. Например, если у вас есть страница "О нас", а под ней есть страницы "Наша миссия" и "Наша команда", то последние будут дочерними страницами.
## Возвращаемое значение
Функция возвращает массив объектов WP_Post, который представляет все дочерние страницы.
## Как использовать функцию
### Аргументы функции
- $page_id (int, обязательный) — ID страницы, для которой нужно найти дочерние страницы.
- $pages (WP_Post[], обязательный) — массив объектов страниц, в которых будет осуществляться поиск дочерних.
### Пример использования
#### 1. Получение дочерних страниц для страницы "Портфолио"
```php
// Получаем все страницы для поиска.
$all_pages = ( new WP_Query() )->query( [
'post_type' => 'page',
'posts_per_page' => -1
] );
// ID страницы, для которой нужно получить дочерние страницы
$about_id = 7;
// Оставляем только дочерние страницы "Портфолио"
$about_childrens = get_page_children( $about_id, $all_pages );
// Упрощаем вывод, убирая ненужные поля
foreach( $about_childrens as &$page ){
unset(
$page->post_content,
$page->post_date_gmt,
$page->post_password,
$page->post_modified_gmt,
$page->post_content_filtered,
$page->post_mime_type
);
}
// Результат
print_r( $about_childrens );
Результат работы
После выполнения кода вы получите массив, содержащий объекты страниц, например:
Array
(
[0] => WP_Post Object
(
[ID] => 10124
[post_author] => 12
[post_date] => 2018-05-19 08:11:19
[post_title] => Политика конфиденциальности
[post_status] => publish
[post_name] => privacy-policy
[post_parent] => 7
)
[1] => WP_Post Object
(
[ID] => 9976
[post_author] => 12
[post_date] => 2018-05-05 01:01:09
[post_title] => Активные пользователи
[post_status] => publish
[post_name] => best-users
[post_parent] => 7
)
)
2. Получение дочерних постов для произвольного типа записи (CPT)
Допустим, вам нужно получить дочерние посты для типа записи "locations":
// ID родительского поста
$location_parent_id = 12;
// Запрос всех постов типа locations
$all_locations = get_pages( [
'post_type' => 'locations',
'post_status' => array( 'publish', 'pending' ) // мой пользовательский выбор
] );
// Используем функцию
$inherited_locations = get_page_children( $location_parent_id, $all_locations );
// Вывод результата в браузер
echo '' . print_r( $inherited_locations, true ) . '';
Код функции get_page_children
Вот как выглядит сам код функции:
function get_page_children( $page_id, $pages ) {
// Создаём массив для хранения дочерних страниц
$children = array();
foreach ( (array) $pages as $page ) {
$children[ (int) $page->post_parent ][] = $page; // Группируем страницы по родителю
}
$page_list = array();
// Начинаем поиск с непосредственных дочерних страниц
if ( isset( $children[ $page_id ] ) ) {
$to_look = array_reverse( $children[ $page_id ] ); // Изменяем порядок для корректного извлечения
while ( $to_look ) {
$p = array_pop( $to_look ); // Берём последнюю страницу из стека
$page_list[] = $p; // Добавляем её в список результатов
if ( isset( $children[ $p->ID ] ) ) {
// Добавляем дочерние страницы к стеку для дальнейшего поиска
foreach ( array_reverse( $children[ $p->ID ] ) as $child ) {
$to_look[] = $child;
}
}
}
}
return $page_list; // Возвращаем список найденных страниц
}
Заключение
Функция get_page_children() является полезным инструментом для работы с иерархическими структурами страниц в WordPress. Она позволяет легко находить дочерние страницы и организовывать их вывод, что может быть очень полезно для создания более структурированных и понятных веб-страниц.