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.0.2

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *