Функция get_page_hierarchy()
сортирует массив страниц в древовидном порядке, так что дочерние записи идут сразу после своих родительских. Она особенно полезна для работы с иерархическими структурами контента, таких как страницы в WordPress, и позволяет легко создавать древовидные структуры URL.
get_page_hierarchy( WP_Post[] $pages, int $page_id ): string[]
get_page_hierarchy()
используется для получения массива страниц, упорядоченного по их иерархии. Она принимает массив объектов WP_Post
и ID родительской страницы, после чего возвращает массив с ключами, соответствующими ID страниц, и значениями, содержащими их ярлыки (slug).
Параметры
- $pages (WP_Post[]) — обязательный параметр. Массив объектов страниц, которые нужно отсортировать по иерархии.
- $page_id (int) — необязательный параметр. ID родительской страницы, с которой начать построение дерева (по умолчанию 0, что означает корневой уровень).
Возвращаемое значение
- string[] — Возвращает массив, где ключи соответствуют ID страниц, а значения — ярлыкам страниц. Массив отсортирован так, что дочерние элементы следуют за родительскими.
Пример 1: Основное использование для сортировки страниц по иерархии
Предположим, у нас есть массив страниц, где некоторые страницы являются дочерними по отношению к другим. get_page_hierarchy()
упорядочит их так, что дочерние страницы будут располагаться сразу после своих родительских:
$pages = [
(object) ['ID' => 101, 'post_name' => 'main-topic', 'post_parent' => 0],
(object) ['ID' => 202, 'post_name' => 'sub-topic-a', 'post_parent' => 101],
(object) ['ID' => 303, 'post_name' => 'sub-topic-b', 'post_parent' => 101],
(object) ['ID' => 404, 'post_name' => 'another-main-topic', 'post_parent' => 0],
];
$sorted_pages = get_page_hierarchy($pages);
/* $sorted_pages будет выглядеть так:
Array
(
[101] => main-topic
[202] => sub-topic-a
[303] => sub-topic-b
[404] => another-main-topic
)
*/
В этом примере дочерние страницы sub-topic-a
и sub-topic-b
следуют за main-topic
, так как они указаны в массиве как его дочерние.
Пример 2: Применение для создания иерархического URL-меню
Можно использовать результат функции get_page_hierarchy()
для создания структуры меню, где URL страниц будет отражать иерархию:
$pages = [
(object) ['ID' => 1, 'post_name' => 'about', 'post_parent' => 0],
(object) ['ID' => 2, 'post_name' => 'team', 'post_parent' => 1],
(object) ['ID' => 3, 'post_name' => 'careers', 'post_parent' => 1],
(object) ['ID' => 4, 'post_name' => 'contact', 'post_parent' => 0],
];
$sorted_hierarchy = get_page_hierarchy($pages);
foreach ($sorted_hierarchy as $id => $slug) {
echo "URL: /$slug\n";
}
/* Вывод:
URL: /about
URL: /team
URL: /careers
URL: /contact
*/
Функция создает массив, где дочерние элементы следуют за родительскими, и мы можем легко использовать его для генерации URL-структуры для меню.
Пример 3: Построение дерева с несколькими уровнями вложенности
Если структура включает несколько уровней иерархии, get_page_hierarchy()
автоматически выстраивает страницы в соответствии с их иерархией.
$pages = [
(object) ['ID' => 10, 'post_name' => 'science', 'post_parent' => 0],
(object) ['ID' => 20, 'post_name' => 'biology', 'post_parent' => 10],
(object) ['ID' => 30, 'post_name' => 'genetics', 'post_parent' => 20],
(object) ['ID' => 40, 'post_name' => 'physics', 'post_parent' => 10],
];
$hierarchical_pages = get_page_hierarchy($pages);
/* $hierarchical_pages будет выглядеть так:
Array
(
[10] => science
[20] => biology
[30] => genetics
[40] => physics
)
*/
Здесь страница genetics
следует за страницей biology
, так как является её дочерней, а страницы biology
и physics
следуют за science
.
Связанные функции
wp_list_pages()
— выводит список страниц с учетом иерархии.get_pages()
— получает список страниц и может использовать параметрparent
для извлечения подстраниц.add_query_arg()
— используется для добавления параметров в URL.
Заключение
Функция get_page_hierarchy()
идеально подходит для работы с иерархическими структурами контента в WordPress. Она упрощает сортировку и построение древовидных структур для страниц, меню и других иерархически зависимых элементов, делая код более организованным и упрощая управление вложенным контентом.