get_term_children

Объединяет в массив и возвращает все дочерние разделы элемента таксономии (категории).

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

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

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

<?php get_term_children( $term, $taxonomy ) ?>
$term(число) (обязательный)
ID термина, все дочерние разделы которого нужно получить.
По умолчанию: нет
$taxonomy(строка) (обязательный)
Название таксономии с которой будет работать функция.
По умолчанию: нет

Примеры

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

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

<?php
$termID = 10;
$taxonomyName = "products";
$termchildren = get_term_children( $termID, $taxonomyName );

echo '<ul>';
foreach ($termchildren as $child) {
	$term = get_term_by( 'id', $child, $taxonomyName );
	echo '<li><a href="' . get_term_link( $term->term_id, $term->taxonomy ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
?>

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

<ul> 
<li><a href="http://ссылка">Название термина</a></li>
<li><a href="http://ссылка">Название термина</a></li>
</ul>

Заметки

  • Использует: _get_term_hierarchy()
  • Использует: $wpdb

Код из


wp-includes/taxonomy.php

WP 4.7.2

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

	$term_id = intval( $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;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *