WordPress как на ладони
wordpress jino

get_page_hierarchy() WP 2.0.0

Сортирует массив с древовидными записями, так что дочерние записи будут расположены после родительских. Вернет урезанный отсортированный массив.

В WP эта функция применяется для построения URL для древовидных записей. Однако бывают ситуации когда она может быть удобна для других целей.

Работает на основе: _page_traverse_name()
✈ 1 раз = 0.000018с = очень быстро | 50000 раз = 0.18с = очень быстро PHP 7.0.8, WP 4.6

Хуков нет.

Возвращает

Массив. Массив где элементы отсортированы по дереву - дочерний элемент находится после родительского. Массив содержит в ключе ID записи, а в значении ярлык (slug) записи.

Array
(
	[54] => hooks
	[44] => resursyi-o-wordpress
	[26] => comment-manager
	[39] => statistics
)

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

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

Примеры

#1 Демонстрация сортировки дерева

Чтобы было нагляднее я убрал большую часть полей, которые есть у каждой записи. В этой сортировки участвуют 3 поля: ID, post_parent и post_name.

Итак что делает функция? Как видно из примера, у нас был массив записей где одна запись является дочерней к другой. Но порядок этих записей в массиве хаотичный.

Эта функция сортирует все элементы массива так, что каждый следующий элемент является дочерним к предыдущему. После этого функция создает новый массив и помещает ID записи в ключ этого массива, а в значение размещается ярлык записи. В результате по полученному массиву мы легко можем создать дерево записей...

$pages = array(
  (object) array(
	 'ID'            => 111,
	 'post_name'     => 'hooks',
	 'post_parent'   => 0,
  ),
  (object) array(
	 'ID'            => 222,
	 'post_name'     => 'comment-manager',
	 'post_parent'   => 444,
  ),
  (object) array(
	 'ID'            => 333,
	 'post_name'     => 'statistics',
	 'post_parent'   => 444,
  ),
  (object) array(
	 'ID'            => 444,
	 'post_name'     => 'resursyi-o-wordpress',
	 'post_parent'   => 111,
  ),
);

$pages = get_page_hierarchy( $pages );

/* $pages будет равен:
Array
(
	[111] => hooks
	[444] => resursyi-o-wordpress
	[222] => comment-manager
	[333] => statistics
)
*/

Код get page hierarchy: wp-includes/post.php WP 4.9

<?php
function get_page_hierarchy( &$pages, $page_id = 0 ) {
	if ( empty( $pages ) ) {
		return array();
	}

	$children = array();
	foreach ( (array) $pages as $p ) {
		$parent_id = intval( $p->post_parent );
		$children[ $parent_id ][] = $p;
	}

	$result = array();
	_page_traverse_name( $page_id, $children, $result );

	return $result;
}

Cвязанные функции

Из раздела: Вспомогательные

get_page_hierarchy 2 комментария

Здравствуйте, !

Ваш комментарий