get_page_children

Получает дочерние страницы к указанной из списка переданных страниц. Получает все уровни вложенности.

Функция работает как фильтр и не делает никаких запросов к БД. Фильтрует весь массив переданный во втором параметре и находит в нем все дочерние страницы к переданному ID. При фильтрации учитываются все уровни вложенности.

Это функция рекурсивно вызывает сама себя.

Хуков нет.

Возвращает

Массив. Объекты с данными постов.

Использование

get_page_children( $page_id, $pages );
$page_id(число) (обязательный)
ID страницы? дочерние к которой нужно получить.
По умолчанию: нет
$pages(массив) (обязательный)
Список объектов постов, по которым будет проходить поиск дочерних страниц.
По умолчанию: нет

Примеры

#1. Пример использования функции:

// Получаем все страницы, по которым будет проходить поиск.
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page'));

// Получаем страницу, дочерние к которой нужно получить
$portfolio =  get_page_by_title('Portfolio');

// Фильтруем все страницы и находим дочерние к Portfolio
$portfolio_children = get_page_children( $portfolio->ID, $all_wp_pages );

// выводим на экран то, что мы в итоге поучили
echo '<pre>' . print_r( $portfolio_children, true ) . '</pre>';

Код из


wp-includes/post.php

WP 4.7.2

<?php
function get_page_children( $page_id, $pages ) {
	// Build a hash of ID -> children.
	$children = array();
	foreach ( (array) $pages as $page ) {
		$children[ intval( $page->post_parent ) ][] = $page;
	}

	$page_list = array();

	// Start the search by looking at immediate children.
	if ( isset( $children[ $page_id ] ) ) {
		// Always start at the end of the stack in order to preserve original `$pages` order.
		$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 ) {
					// Append to the `$to_look` stack to descend the tree.
					$to_look[] = $child;
				}
			}
		}
	}

	return $page_list;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *