Функция get_post_ancestors()
в WordPress позволяет получить список идентификаторов всех родительских записей для данной записи. Это полезно при работе с иерархическими записями, такими как страницы, где одна запись может быть дочерней по отношению к другой.
get_post_ancestors( int|WP_Post $post ): int[]
Аргументы:
- $post (int|WP_Post) — Идентификатор записи или объект
WP_Post
, для которой требуется получить родителей. Если не указан, используется текущий пост в глобальной переменной$post
.
Возвращаемое значение:
Массив идентификаторов родительских записей в порядке от самой глубокой (т.е. самой удаленной от текущей записи) к самой ближайшей.
Пример использования
Рассмотрим пример использования функции get_post_ancestors()
в контексте страницы с иерархией.
<?php
// Получаем текущий пост
global $post;
// Проверяем, является ли текущий пост страницей и есть ли у нее родительские страницы
if (is_page() && $post->post_parent) {
// Получаем массив идентификаторов родительских записей
$ancestors = get_post_ancestors($post->ID);
// Выводим идентификаторы родительских записей
echo '<ul>';
foreach ($ancestors as $ancestor_id) {
echo '<li>Родительская запись ID: ' . esc_html($ancestor_id) . '</li>';
}
echo '</ul>';
} else {
echo 'Текущая запись не имеет родительских записей.';
}
?>
Объяснение кода:
- Получение текущего поста: Мы используем глобальную переменную
$post
для доступа к текущему посту. - Проверка: Сначала проверяем, является ли текущая запись страницей и имеет ли она родительские страницы (
is_page()
и$post->post_parent
). - Получение родителей: Используем
get_post_ancestors()
для получения массива идентификаторов всех родительских записей. - Вывод: Перебираем массив идентификаторов и выводим их на экран в виде списка.
Важные замечания
- Функция
get_post_ancestors()
возвращает массив в порядке от самой глубокой записи (самого удаленного предка) к самой близкой. Это означает, что первая запись в массиве будет самой удаленной от текущей записи, а последняя — ближайшей. - Если текущая запись не имеет родительских записей, функция вернет пустой массив.
- Функция работает только для иерархических типов записей, таких как страницы. Для произвольных типов записей или записей без иерархии она будет возвращать пустой массив или не вернет ничего.
Пример 2: Получение всех родительских записей
Предположим, у нас есть структура страниц, где страница с ID 45 является дочерней для страницы с ID 25, а страница с ID 25 в свою очередь дочерняя для страницы с ID 5. Таким образом, структура выглядит следующим образом: 5 (верхний уровень) > 25 (средний уровень) > 45 (дочерняя страница).
$ancestors = get_post_ancestors(45);
/* Вернет
Array
(
[0] => 25
[1] => 5
)
*/
Пример 3: Проверка наличия родительской страницы
Если нужно проверить, является ли страница с ID 60 родительской для страницы с ID 35, используйте следующий код:
$ancestors = get_post_ancestors(35);
if (in_array(60, $ancestors)) {
echo "Страница с ID 60 является родительской для страницы с ID 35";
} else {
echo "Страница с ID 60 не является родительской для страницы с ID 35";
}
Пример 4: Вывод заголовка самой верхней страницы
Рассмотрим структуру страниц:
- Главная страница (ID=100)
- Раздел 1 (ID=105)
- Подраздел 1.1 (ID=110)
- Подраздел 1.1.1 (ID=115)
- Подраздел 1.1 (ID=110)
- Раздел 1 (ID=105)
- Главная страница 2 (ID=120)
- Раздел 2 (ID=125)
- Раздел 3 (ID=130)
Для получения заголовка самой верхней страницы, например, для страницы с ID 115:
// Получаем массив с ID всех родительских страниц
$ids = get_post_ancestors(115);
/* Вернет
Array
(
[0] => 110
[1] => 105
[2] => 100
)
*/
// Получаем ID самой верхней страницы (последний элемент массива)
$id = array_pop($ids);
// Выводим заголовок самой верхней страницы
echo get_the_title($id); // выведет "Главная страница"
Заключение
Функция get_post_ancestors()
является мощным инструментом для управления и отображения иерархии записей на вашем сайте WordPress, позволяя эффективно организовывать и структурировать контент.