wp_get_post_terms()

Функция возвращает массив объектов элементов таксономий WP_Term в случае успеха, пустой массив, если терминов по заданному критерию не найдено или же объект ошибки WP_Error, если таксономия $taxonomy не существует.

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

wp_get_post_terms( $post_id = 0, $taxonomy = 'post_tag', $args = array() )

Параметры

$post_id
(целое число) ID поста, элементы таксономий которого нужно получить. Функция не использует ID текущего поста в цикле. Если не указать этот параметр, то функция вернёт пустой массив.
$taxonomy
(строка|массив) Одна или несколько таксономий, элементы которых нужно получить.
$args
(массив) Массив аргументов, можно использовать любые параметры функции get_terms(). В целом этот параметр и является фишкой этой функции, если вы его не задаёте, то используйте лучше get_the_terms().

Примеры работы с функцией wp_get_post_terms()

1. Используем различные значения параметра fields

Параметр fields позволяет задать, что именно должна возвращать функция, по умолчанию он равен значению all– массив объектов WP_Term.

Глянем другие варианты в коде:

// Получаем массив объектов элементов таксономии "true_taxonomy".
$term_list = wp_get_post_terms( $post->ID, 'true_taxonomy', array( 'fields' => 'all' ) );
print_r( $term_list );
/* 
в этой ситуации в результате мы получаем массив объектов:
Array(
	[0] => stdClass Object(
			[term_id] => 1
			[name] => Италия
			[slug] => italia
			[term_group] => 0
			[term_taxonomy_id] => 1
			[taxonomy] => true_taxonomy
			[description] => 
			[parent] => 0
			[count] => 75
		)
 
	[1] => stdClass Object(
			[term_id] => 4
			[name] => Эстония
			[slug] => estonia
			[term_group] => 0
			[term_taxonomy_id] => 4
			[taxonomy] => true_taxonomy
			[description] => 
			[parent] => 0
			[count] => 51
		)
)
*/
 
// Получаем массив из названий элементов таксономии "true_taxonomy".
$term_list = wp_get_post_terms( $post->ID, 'true_taxonomy', array( 'fields' => 'names' ) );
print_r( $term_list );
 
/* 
результат будет выглядеть так, да, обычный одномерный массив из названий элементов таксономий
Array(
	[0] => Италия
	[1] => Эстония
)
*/
 
// Получаем массив ID элементов таксономии "true_taxonomy".
$term_list = wp_get_post_terms( $post->ID, 'true_taxonomy', array( 'fields' => 'ids' ) );
print_r( $term_list );
 
/*
Массив из ID элементов таксономий
Array
(
	[0] => 1
	[1] => 4
)
*/

2. Выводим элементы таксономий в виде маркированного списка и через запятую

С маркированным списком всё супер-легко:

$term_list = wp_get_post_terms( $post->ID, 'true_taxonomy' );
 
if( $term_list ) {
	echo '<ul>';
	foreach( $term_list as $term ) {
		echo '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>';
	}
	echo '</ul>';
}

Чуть поинтереснее в ситуации, когда нужно вывести элементы таксономи через запятую:

$term_list = wp_get_post_terms( $post->ID, 'true_taxonomy' );
 
if( $term_list ) {
	$terms = array();
	foreach( $term_list as $term ) {
		$terms[] = '<a href="' . get_term_link( $term ) . '">' . $term->name . '</a>';
	}
	echo join( ', ', $terms );
}

Миша

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

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

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

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.