WordPress как на ладони
wordpress jino

term_is_ancestor_of() WP 3.4.0

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

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

Используется в: cat_is_ancestor_of().
✈ 1 раз = 0.000142с = быстро | 50000 раз = 0.87с = очень быстро PHP 7.0.14, WP 4.7

Хуков нет.

Возвращает

true или false.

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

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

Примеры

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

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

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

#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>
	<?
}
?>

Заметки

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

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

  • Передаваемый параметр должен быть либо числом либо объектом. Если передана строка в виде числа, то функция вернет false.

Код term is ancestor of: wp-includes/taxonomy.php VER 4.9.1

<?php
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 );
}

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

Из метки: Условные теги (все)

Еще из раздела: Любые таксономии

term_is_ancestor_of Комментариев нет

Здравствуйте, !

Ваш комментарий