Функция get_post_ancestors(): обзор и примеры использования

## Функция 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. С её помощью вы можете легко получить информа��ию о родительских страницах и использовать эти данные для управления контентом на вашем сайте.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *