WordPress как на ладони
rgbcode is looking for WordPress developers.

get_term_children()WP 2.3.0

Получает все дочерние элементы указанного элемента таксономии (категории) в виде массива.

Эта функция объединит все уровни дочерних разделов в один массив, т.е. если мы указали элемент таксономии 10 у которого есть дочерний элемент 15, а у него, в свою очередь, есть раздел 20, то функция соберет в единый массив данные об элементах таксономии 15 и 20.

Функцию логично использовать только для таксономий древовидного типа.

Это рекурсивная (вызывает сама себя) функция, которая только собирает данные, а ID терминов получает _get_term_hierarchy().

Работает на основе: _get_term_hierarchy()
1 раз — 0.000048 сек (очень быстро) | 50000 раз — 0.75 сек (очень быстро) | PHP 7.0.5, WP 4.5.2

Хуков нет.

Возвращает

Массив|WP_Error. Массив ID дочерних элементов таксономии или объект WP_Error, в случае ошибки.

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

$terms = get_term_children( $term, $taxonomy );
$term(число) (обязательный)
ID термина, все дочерние разделы которого нужно получить.
$taxonomy(строка) (обязательный)
Название таксономии с которой будет работать функция.

Примеры

0

#1 Базовое использование

Выведем ul списком на экран названия дочерних разделов элемента таксономии 10, в виде ссылок на соответствующие страницы архивов:

$term_id     = 10; // get_queried_object()->term_id; - ID текущей рубрики (динамически)
$tax_name    = 'products';
$term_childs = get_term_children( $term_id, $tax_name );

echo '<ul>';
foreach ( $term_childs as $child ) {

	$term = get_term_by( 'id', $child, $tax_name );

	echo '<li><a href="' . get_term_link( $term ) . '">' . esc_html( $term->name ) . '</a></li>';
}

echo '</ul>';

В результате выполнения этого кода, на экране мы получим, нечто подобное:

<ul> 
	<li><a href="http://example.com">Название термина 1</a></li>
	<li><a href="http://example.com">Название термина 2</a></li>
</ul>

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

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

Код get_term_children() WP 6.4.3

function get_term_children( $term_id, $taxonomy ) {
	if ( ! taxonomy_exists( $taxonomy ) ) {
		return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
	}

	$term_id = (int) $term_id;

	$terms = _get_term_hierarchy( $taxonomy );

	if ( ! isset( $terms[ $term_id ] ) ) {
		return array();
	}

	$children = $terms[ $term_id ];

	foreach ( (array) $terms[ $term_id ] as $child ) {
		if ( $term_id === $child ) {
			continue;
		}

		if ( isset( $terms[ $child ] ) ) {
			$children = array_merge( $children, get_term_children( $child, $taxonomy ) );
		}
	}

	return $children;
}
10 комментариев
    Войти