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.