get_ancestors()
— это полезная функция WordPress, которая позволяет получить массив ID всех родительских элементов для заданного объекта. Это может быть пост, страница, категория или любой другой объект, имеющий иерархическую структуру. Функция возвращает список предков объекта в порядке от ближайшего родителя к самому верхнему элементу.
get_ancestors( int $object_id, string $object_type = '', string $resource_type = '' ): int[]
Описание
Функция get_ancestors()
извлекает ID всех родительских элементов для указанного объекта, будь то страница или элемент таксономии. Она работает на основе других функций, таких как get_post_ancestors()
и get_term()
, и подходит для случаев, когда необходимо определить полную цепочку предков объекта.
Параметры
- $object_id (int) — ID объекта, для которого необходимо получить предков. Это обязательный параметр.
- $object_type (string) — Тип объекта, для которого извлекаются предки. Может быть названием типа записи (например,
'post'
,'page'
) или таксономией (например,'category'
,'tag'
). По умолчанию — пустая строка. - $resource_type (string) — Тип ресурса для объекта. Может быть
'post_type'
или'taxonomy'
. По умолчанию — пустая строка. Этот параметр был добавлен в версии WordPress 4.1.
Возвращаемые значения
Функция возвращает массив ID предков объекта. Если у объекта нет предков, функция вернет пустой массив.
Пример 1: Получение всех предков для категории
Предположим, у нас есть следующая иерархия категорий:
— Литература (ID: 10)
— Проза (ID: 22)
— Романы (ID: 35)
Для категории с ID 35 функция вернет ID всех её предков:
$ancestors = get_ancestors( 35, 'category' );
print_r( $ancestors );
Результат будет:
Array
(
[0] => 22 // Проза
[1] => 10 // Литература
)
Пример 2: Получение предков для страницы
Предположим, у нас есть такая иерархия страниц:
— О компании (ID: 50)
— История компании (ID: 51)
— Основатели (ID: 60)
Для страницы с ID 60 можно получить её предков:
$ancestors = get_ancestors( 60, 'page' );
print_r( $ancestors );
Результат:
Array
(
[0] => 51 // История компании
[1] => 50 // О компании
)
Пример 3: Получение ID самой верхней категории
Предположим, у нас есть категория «Научная фантастика» с ID 201, которая является дочерней категории «Фантастика» (ID: 150), а та, в свою очередь, дочерней категории «Литература» (ID: 100). Мы хотим получить ID самой верхней родительской категории.
$ancestors = get_ancestors( 201, 'category' );
$top_category_id = array_pop( $ancestors );
echo $top_category_id;
Результат:
100 // ID категории "Литература"
Пример 4: Получение предков для пользовательского типа записи
Если у вас есть иерархия пользовательского типа записи, например, portfolio
, можно также использовать get_ancestors()
для извлечения ID всех предков записи:
$ancestors = get_ancestors( 45, 'portfolio', 'post_type' );
print_r( $ancestors );
Пример 5: Использование для пользовательских таксономий
Функция также поддерживает работу с пользовательскими таксономиями. Предположим, у вас есть пользовательская таксономия project_category
, и вы хотите получить всех предков для термина:
$ancestors = get_ancestors( 88, 'project_category', 'taxonomy' );
print_r( $ancestors );
Примечания
- Если необходимо получить полную иерархию страницы или таксономии,
get_ancestors()
— один из наиболее простых и эффективных способов сделать это. - Функция возвращает предков в порядке от ближайшего к самого верхнему уровню иерархии.
- Для удаления дубликатов в массиве предков можно использовать
array_unique()
.
Заключение
Функция get_ancestors()
в WordPress — это мощный инструмент для работы с иерархическими объектами, такими как страницы и таксономии. Она позволяет легко получить всю цепочку предков объекта, что полезно для создания навигационных цепочек, хлебных крошек и других элементов интерфейса, зависящих от иерархии.