## Функция get_post_ancestors()
### Обзор
Функция get_post_ancestors()
позволяет получить идентификаторы всех предков (родительских страниц) заданной страницы в WordPress. Это может быть полезно, если вам нужно знать, какие страницы были созданы выше текущей.
- **Версия:** WP 2.5.0
- **Используется в:** get_ancestors()
- **Производительность:**
- 1 раз — 0.001242 сек (очень медленно)
- 50000 раз — 0.33 сек (очень быстро)
- **PHP:** 7.2.5, WP 5.0.1
- **Хуки:** Нет.
### Возвращаемое значение
Функция возвращает массив идентификаторов предков. Если предков нет, возвращается пустой массив.
### Использование
```php
$ancestors = get_post_ancestors( $post );
- Параметр:
$post
(int|WP_Post) (обязательный) - Идентификатор поста или объект поста.
Примеры использования
Пример 1: Получение предков страницы
Предположим, у нас есть три страницы:
- Страница 10 — верхняя страница.
- Страница 20 — дочерняя страница 10.
- Страница 30 — дочерняя страница 20.
$ancestors = get_post_ancestors( 30 );
/* Возвращает:
Array
(
[0] => 20
[1] => 10
)
*/
Пример 2: Отображение заголовка родительской страницы
Допустим, структура страниц следующая:
- Страница 1 (ID=611)
- Страница 1-1 (ID=613)
- Страница 1-1-1 (ID=615)
- Страница 1-1-1-1 (ID=617)
Получим заголовок самой верхней родительской страницы для страницы 1-1-1-1:
$ids = get_post_ancestors( 617 );
$id = array_pop( $ids ); // Получение ID верхней страницы
// Печать заголовка верхней страницы
echo get_the_title( $id ); // выведет "Страница 1"
Пример 3: Проверка, является ли страница родительской
Если необходимо узнать, является ли страница с ID 34 родителем страницы 12:
$ancestors = get_post_ancestors( 12 );
if (in_array(34, $ancestors)) {
echo 'Страница 34 является родителем страницы 12';
} else {
echo 'Страница 34 не является родителем страницы 12';
}
Пример 4: Получение миниатюры верхней страницы
Для отображения миниатюры верхней страницы:
global $post;
$parents = get_post_ancestors($post);
$id = $post->ID;
// Получение ID 'верхней' страницы
if (!empty($parents)) {
$id = array_pop($parents);
}
if (has_post_thumbnail($id)) {
echo get_the_post_thumbnail($id, 'thumbnail');
}
Код функции get_post_ancestors
Для понимания, как работает функция, вот её код:
function get_post_ancestors( $post ) {
$post = get_post( $post );
if ( ! $post || empty( $post->post_parent ) || $post->post_parent == $post->ID ) {
return array(); // Если поста нет или он сам является родителем
}
$ancestors = array();
$id = $post->post_parent;
$ancestors[] = $id;
while ( $ancestor = get_post( $id ) ) {
// Проверка на зацикливание: если предок уже встречался, выходим из цикла.
if ( empty( $ancestor->post_parent ) || ( $ancestor->post_parent == $post->ID ) || in_array( $ancestor->post_parent, $ancestors, true ) ) {
break;
}
$id = $ancestor->post_parent;
$ancestors[] = $id;
}
return $ancestors; // Возвращаем массив предков
}
Заключение
Функция get_post_ancestors()
— полезный инструмент для работы с иерархией страниц в WordPress. С её помощью вы можете легко получить информа��ию о родительских страницах и использовать эти данные для управления контентом на вашем сайте.