Функция GET_PAGE_CHILDREN() в WordPress 1.5.1: примеры использования и описание

# Функция 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. Она позволяет легко находить дочерние страницы и организовывать их вывод, что может быть очень полезно для создания более структурированных и понятных веб-страниц.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *