Получение предков с помощью функции get_ancestors() в WordPress

get_ancestors() — Получение предков в WordPress

Функция get_ancestors() используется для получения массива идентификаторов предков для заданного объекта в WordPress. Это может быть полезно, если вы хотите узнать родительские элементы для постов, страниц или таксономий.

Подробности функции

  • Версия: WP 3.1.0
  • Используется в: get_post_ancestors(), get_term()
  • Скорость работы:
    • 1 раз — 0.00174 сек (очень медленно)
    • 50,000 раз — 0.95 сек (очень быстро)
  • PHP: 7.2.5, WP 5.0.1

Возвращаемое значение

Функция возвращает массив целых чисел (Int[]), где указаны идентификаторы предков, начиная с самого нижнего уровня и заканчивая высшим в иерархии.

Использование функции

get_ancestors( $object_id, $object_type, $resource_type );

Параметры

  • $object_id (int): Идентификатор объекта (например, поста или термина таксономии).
  • $object_type (string): Тип объекта, для которого мы будем получать предков. Это может быть тип поста или название таксономии. По умолчанию: ''.
  • $resource_type (string): Тип ресурса, к которому относится $object_type. Принимает 'taxonomy' или 'post_type'. По умолчанию: ''.

Примеры использования

Пример 1: Получение идентификаторов всех родительских элементов таксономии

Предположим, у нас есть следующая структура категорий (идентификаторы указаны в скобках):

  • Книги (6)
    • Художественная литература (23)
    • Рэй Брэдбери (208)

В этом случае код будет выглядеть так:

$ancestors = get_ancestors( 208, 'category' );

Теперь переменная $ancestors будет содержать массив:

Array
(
    [0] => 23
    [1] => 6
)

Пример 2: Получение идентификаторов всех родительских страниц

Предположим, вам нужно получить идентификаторы родительск��х статических страниц. У нас есть такая структура:

  • О сайте (447)
    • Подстраница (448)

Код будет таким:

$ancestors = get_ancestors( 448, 'page' );

Теперь переменная $ancestors будет содержать массив:

Array
(
    [0] => 447
)

Пример 3: Получение идентификатора самой верхней категории

Если вам нужно получить идентификатор самой верхней категории, вы можете использовать следующий код:

$ancestors = get_ancestors( 208, 'category' );
$top_cat_id = array_pop( $ancestors );

Изменения в функции

  • С 3.1.0 — Функция была введена.
  • С 4.1.0 — Добавлен аргумент $resource_type.

Код функции get_ancestors()

Вот часть кода, как реализована функция get_ancestors() в файлах WordPress:


function get_ancestors( $object_id = 0, $object_type = '', $resource_type = '' ) {
$object_id = (int) $object_id;

$ancestors = array();

if ( empty( $object_id ) ) {
    return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type, $resource_type );
}

if ( ! $resource_type ) {
    if ( is_taxonomy_hierarchical( $object_type ) ) {
        $resource_type = 'taxonomy';
    } elseif ( post_type_exists( $object_type ) ) {
        $resource_type = 'post_type';
    }
}

if ( 'taxonomy' === $resource_type ) {
    $term = get_term( $object_id, $object_type );
    while ( ! is_wp_error( $term ) && ! empty( $term->parent ) && ! in_array( $term->parent, $ancestors, true ) ) {
        $ancestors[] = (int) $term->parent;
        $term        = get_term( $term->parent, $object_type );
    }
} elseif ( 'post_type' === $resource_type ) {
    $ancestors = get_post_ancestors( $object_id );
}

return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type, $resource_type );

}

Связанные функции

  • cat_is_ancestor_of(): Проверяет, является ли одна категория предком другой.
  • get_adjacent_post(): Получает соседние посты.
  • get_category_parents(): Получает всех родителей категории.
  • get_post_ancestors(): Получает предков поста.
  • get_term_children(): Получает детей термина таксономии.

Эта информация поможет вам лучше понять и использовать функцию get_ancestors() в WordPress.

Leave a Reply

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