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

get_term_children() WP 2.3.0

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

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

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

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

function _get_term_hierarchy( $taxonomy ) {
	if ( !is_taxonomy_hierarchical($taxonomy) )
		return array();
	$children = get_option("{$taxonomy}_children");

	if ( is_array($children) )
		return $children;
	$children = array();
	$terms = get_terms($taxonomy, array('get' => 'all', 'orderby' => 'id', 'fields' => 'id=>parent'));
	foreach ( $terms as $term_id => $parent ) {
		if ( $parent > 0 )
			$children[$parent][] = $term_id;
	}
	update_option("{$taxonomy}_children", $children);

	return $children;
}
Работает на основе: _get_term_hierarchy()
✈ 1 раз = 0.000048с = очень быстро | 50000 раз = 0.75с = очень быстро PHP 7.0.5, WP 4.5.2

Хуков нет.

Возвращает

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

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

<?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 children: wp-includes/taxonomy.php WP 4.8.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;
}

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

Из метки: Связи

Еще из метки: term (термины таксономий)

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

get_term_children 3 комментария
  • Илья cайт: gfoxhome.com

    Исправь плз пример:

    get_term_link( $term->term_id, $term->taxonomy)

    А то твой код ошибку показывает sad

    Ответить3.4 года назад #
  • Эрали

    Привет! А как получить картинку категории в этом же цикле?

    Ответить22 дня назад #

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

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