Функция term_is_ancestor_of()
используется для проверки, является ли один термин (категория, метка или пользовательская таксономия) родительским по отношению к другому термину. Это особенно полезно при работе с иерархическими таксономиями, где термины могут иметь вложенные структуры.
term_is_ancestor_of( int|object $term1, int|object $term2, string $taxonomy ): bool
Параметры
- $term1 (int|object, обязательный): ID или объект термина, который нужно проверить на родительство.
- $term2 (int|object, обязательный): ID или объект термина, который будет проверяться как дочерний.
- $taxonomy (string, обязательный): Название таксономии, к которой принадлежат оба термина.
Возвращаемое значение
- bool: Возвращает
true
, если $term1 является родительским термином по отношению к $term2; в противном случае —false
.
Как работает функция
Функция проверяет, является ли второй термин дочерним к первому, и проверяет все уровни вложенности. Это значит, что если $term2 вложен в $term1 через несколько уровней, функция всё равно вернёт true
.
Заметки
- Функция работает как с ID терминов, так и с объектами терминов.
- Если переданный параметр является строкой, представляющей число, функция вернёт
false
.
Пример 1: Проверка родственности терминов
Предположим, что у нас есть пользовательская таксономия my_tax
, и термин с ID 7 является дочерним к термину с ID 3. Мы можем проверить это следующим образом:
if ( term_is_ancestor_of( 3, 7, 'my_tax' ) ) {
echo 'Термин 7 - это дочерний термин к термину 1';
}
Пример 2: Отображение контента для всей ветки терминов
В этом примере мы проверим, используется ли термин с ID 4 (например, «Музыка») из таксономии sound
, и если это так, выведем меню для всех дочерних терминов:
<?php
// Получаем текущий термин.
$term = get_term_by( 'slug', get_query_var('term'), 'sound' );
if ( term_is_ancestor_of( 4, $term, 'sound' ) || is_term( 4, 'sound' ) ) {
?>
<div id="music_subnav_menu" class="subnav_menu">
<?php wp_nav_menu( array( 'menu' => 'Music' ) ); ?>
</div>
<?php
}
?>
Пример 3: Проверка вложенности с несколькими уровнями
Предположим, что у нас есть более сложная иерархия, и мы хотим проверить, является ли термин с ID 3 родительским для термина с ID 7, который вложен в термин с ID 5. Мы можем использовать ту же функцию:
if ( term_is_ancestor_of( 3, 7, 'my_tax' ) ) {
echo 'Термин 3 - это родительский термин для термина 7';
}
Заключение
Функция term_is_ancestor_of()
является мощным инструментом для работы с иерархическими таксономиями в WordPress. Она позволяет легко проверять родственные отношения между терминами, что может быть полезно для управления контентом и навигацией на сайте.