wp_get_object_terms()

Функция нужна для получения элементов таксономий (рубрик, меток и т.д) постов (записей, страниц или постов произвольного типа).

Очень похожа на функцию wp_get_post_terms().

Возвращает:

  • массив объектов терминов WP_Term,
  • пустой массив, если у поста нет элементов таксономии (терминов) по заданным критериям,
  • объект WP_Error, если мы попытались получить термины несуществующей таксономии (хотя бы одной из переданных).

Если вы вызываете эту функцию несколько раз в итерациях цикла вывода постов, то притормозите, возможно get_the_terms() подойдёт вам больше, т.к она использует кэширование и работает быстрее.

wp_get_object_terms( $object_ids, $taxonomies, $args = array() )

Параметры

$object_ids
(целое|массив) ID поста или массив из ID постов, термины которых нужно получить.
$taxonomies
(строка|массив) Название таксономии или нескольких таксономий в виде массива, термины которых нужно получить.
$args
(массив) Массив аргументов, можно использовать любые параметры функции get_terms().

Пример

В качестве примера предположим, что у нас с вами установлен плагин WooCommerce, а значит имеется произвольный тип поста product (Товары) и таксономии product_category (Категории товаров) и product_tag (Метки товаров).

Попробуем получить все категории и метки товара с ID = 100;

$product_id = 100;
 
$product_terms = wp_get_object_terms( $product_id,  array( 'product_category', 'product_tag' ) );
 
// сначала проверим на ошибку WP_Error
if ( ! is_wp_error( $product_terms ) ) {
	// теперь проверим, что термины по заданным критериям существуют
	if ( ! empty( $product_terms ) ) {
		// выводим их в виде маркированного списка
		echo '<ul>';
		foreach( $product_terms as $term ) {
			echo '<li id="product-term-' . $term->term_id . '"><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>'; 
		}
		echo '</ul>';
	}
} else {
	echo 'Вероятно WooCommerce не установлен.';
}

Ещё больше примеров – в описании функции wp_get_post_terms().

Хуки

Внутри функции есть несколько фильтров, которые позволяют изменить передаваемые в функцию параметры или возвращаемый результат.

wp_get_object_terms_args

Этот хук позволяет изменить значения в массиве $args для каждого использования wp_get_object_terms() на сайте, а значит и функций, которые берут её за основу, например wp_get_post_terms().

Давайте изменим сортировку? Сделаем её по количеству постов, присвоенных в термин. И только для категорий (рубрик)!

add_filter( 'wp_get_object_terms_args', 'true_change_terms_ordering', 25, 3 );
 
function true_change_terms_ordering( $args, $object_ids, $taxonomies ) {
 
	if( in_array( 'category', $taxonomies ) ) {
		$args[ 'orderby' ] = 'count';
		$args[ 'order' ] = 'DESC';
	}
 
	return $args;
 
}

С версии 4.9.0

get_object_terms

Позволяет отфильтровать термины, возвращаемые функцией.

Допустим, что нам нужно исключить какой-то определённый термин, например с ID=55 или ярлыком private.

add_filter( 'get_object_terms', 'true_remove_a_term', 25, 4 );
 
function true_remove_a_term( $terms, $object_ids, $taxonomies, $args ) {
 
	for( $i = 0; $i < count( $terms ); $i++ ) {
		if( 55 === $terms[$i]->term_id ) { // или 'private' === $terms[$i]->slug
			unset( $terms[$i] );
			break; // элементы таксономий имеют уникальные ID, поэтому выходим из цикла
		}
	}
	$terms = array_values( $terms ); // обновляем индексы
 
	return $terms;
 
}

С версии 4.2.0

wp_get_object_terms

Является практически полной копией фильтра get_object_terms, с тем лишь исключением, что параметры $object_ids и $taxonomies являются строками, в которых ID (или названия таксономий) разделены запятыми.

С версии 2.8.0

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал