term_is_ancestor_of()WP 3.4.0

Проверяет, является ли второй термин дочерним к первому (проверяются все уровни вложенности). Условный тег.

Вернет true если указанный в первом параметре термин, является родительским по отношению ко второму. Будут проверяться все уровни вложенности.

Заметки

  • Функция сработает, если второй термин будет дочерним к первому;

  • Результат true будет возвращен даже если $term2 вложена в $term1 через несколько терминов (многоуровневая проверка вложенности);

  • Передаваемый параметр должен быть либо числом либо объектом. Если передана строка в виде числа, то функция вернет false.
Основа для: cat_is_ancestor_of()
1 раз — 0.000142 сек (быстро) | 50000 раз — 0.87 сек (очень быстро) | PHP 7.0.14, WP 4.7

Хуков нет.

Возвращает

true|false.

  • true — когда $term1 родственный термин к термину $term2.
  • false — когда не родственный.

Использование

if( term_is_ancestor_of( $term1, $term2, $taxonomy ) ){
	// есть зависимость
}
$term1(число/объект) (обязательный)
ID или объект, который должен быть родительским термином.
$term2(число/объект) (обязательный)
Дочерний термин.
$taxonomy(строка) (обязательный)
Название таксономии которым принадлежат указанные в $term1 и $term2 термины.

Примеры

0

#1 Проверка родственности элемента таксономии

Предположим, что у нас есть пользовательская древовидная таксономия my_tax и в ней термин с ID 5 является дочерним к термину с ID 1. Тогда это условие будет справедливым:

if( term_is_ancestor_of( 1, 5, 'my_tax') ){
	echo 'Термин 4 - это дочерний термин к термину 1';
}
0

#2 Контент для всей ветки терминов

Этот пример полезен, нужно вывести определенны контент для всей ветки терминов. Т.е., когда нужно вывести контент для любых дочерних терминов к указанному и для указанного термина (ID=4).

Код ниже проверяет используется ли термин Music (ID 4) из таксономии Sound и если это этот термин или любой его дочерний, то выводится меню, с помощью функции wp_nav_menu():

<?php 
// $term - это текущий просматриваемый термин. 
// Его можно получить так, если нужно:
// $term = get_term_by( 'slug', get_query_var('term'), 'sound');
if (term_is_ancestor_of(4, $term, 'sound') or is_term(4, 'sound')){
	?>
	<div id="music_subnav_menu" class="subnav_menu">
		<?php wp_nav_menu( array('menu' => 'Music' )); ?>
	</div>
	<?
}
?>

Список изменений

С версии 3.4.0 Введена.

Код term_is_ancestor_of() WP 6.4.3

function term_is_ancestor_of( $term1, $term2, $taxonomy ) {
	if ( ! isset( $term1->term_id ) ) {
		$term1 = get_term( $term1, $taxonomy );
	}
	if ( ! isset( $term2->parent ) ) {
		$term2 = get_term( $term2, $taxonomy );
	}

	if ( empty( $term1->term_id ) || empty( $term2->parent ) ) {
		return false;
	}
	if ( $term2->parent === $term1->term_id ) {
		return true;
	}

	return term_is_ancestor_of( $term1, get_term( $term2->parent, $taxonomy ), $taxonomy );
}