get_page_hierarchy()
Сортирует массив с древовидными записями, опираясь на родительские связи (post_parent).
По итогу работы, дочерние записи располагаются после родительских. Вернет урезанный отсортированный массив.
В WP эта функция применяется для построения URL для древовидных записей. Однако бывают ситуации когда она может быть удобна для других целей.
Несмотря на то что первый параметр передается по ссылке, переданное значение никак не меняется. Видимо это легаси.
Хуков нет.
Возвращает
Строку[]. Массив где элементы отсортированы по дереву - дочерний элемент находится после родительского.
Массив содержит в ключе ID записи, а в значении ярлык (slug) записи.
Array ( [54] => no-parents [87] => parent-page [97] => child-1 [32] => child-2 )
Использование
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' => 'no-parents', 'post_parent' => 0, ), (object) array( 'ID' => 222, 'post_name' => 'child-1', 'post_parent' => 444, ), (object) array( 'ID' => 333, 'post_name' => 'child-2', 'post_parent' => 444, ), (object) array( 'ID' => 444, 'post_name' => 'parent-page', 'post_parent' => 111, ), ); $pages = get_page_hierarchy( $pages ); /* $pages will be equal to: Array ( [111] => no-parents [444] => parent-page [222] => child-1 [333] => child-2 ) */
Список изменений
| С версии 2.0.0 | Введена. |
Код get_page_hierarchy() get page hierarchy WP 6.9.1
function get_page_hierarchy( &$pages, $page_id = 0 ) {
if ( empty( $pages ) ) {
return array();
}
$children = array();
foreach ( (array) $pages as $p ) {
$parent_id = (int) $p->post_parent;
$children[ $parent_id ][] = $p;
}
$result = array();
_page_traverse_name( $page_id, $children, $result );
return $result;
}