get_the_terms() — возвращает массив объектов элементов таксономий поста

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Благодаря этой функции вы можете вы вывести все метки, которые присвоены к посту, все рубрики, которым принадлежит пост (одновременно и метки и рубрики тоже можно), а также элементы других таксономий (иначе — термины).

Также хочу обратить ваше внимание на то, что эта функция не работает непосредственно с базой данных, прежде всего она пытается получить всё необходимое из кэша WordPress.

get_the_terms( $post, $taxonomy )

Параметры

$post
(целое число|объект WP_Post) Объект или ID нужного нам поста, термины которого нужно получить.
$taxonomy
(строка|массив) Название таксономии, элементы которой будем получать, также имеется возможность указать массив из нескольких таксономий, например array('category','post_tag').

В случае, если указанного вами поста не существует, либо ему просто не присвоено элементов заданных таксономий, функция возвращает false. А также объект WP_Error при указании несуществующей таксономии.

Выводимые термины сортируются по имени по возрастанию.

Примеры использования get_the_terms()

Как я уже писал, функция возвращает массив объектов таксономий, как с этим работать — посмотрим на примере.

Ну и как всегда начнём от простого к сложному.

1. Вывод ссылок на все метки текущего поста

$termini = get_the_terms( get_the_ID(), 'post_tag' );
 
// так как функция вернула массив, то логично будет прокрутить его через foreach()
foreach( $termini as $termin ){
	echo '<a href="' . get_term_link( $termin ) . '">' . $termin->name . '</a>';
}
/*
 * Также вы можете использовать:
 * $termin->ID - понятное дело, ID элемента
 * $termin->slug - ярлык элемента
 * $termin->term_group - значение term group
 * $termin->term_taxonomy_id - ID самой таксономии
 * $termin->taxonomy - название таксономии
 * $termin->description - описание элемента
 * $termin->parent - ID родительского элемента
 * $termin->count - количество содержащихся в нем постов
 */

Для получения URL ссылки на страницу термина, я использовал функцию get_term_link().

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

Основная проблема это, вы не поверите, запятые, то есть если мы будем просто выводить элементы как в первом примере и добавим запятую после </a>, то на конце будет всегда оставаться лишняя запятая, а она нам совсем ни к чему.

// переменная $post в данном случае - объект поста
$termini = get_the_terms( $post, array( 'category', 'post_tag', 'ваша_произвольная_таксономия' ) );
 
// проверяем, что $termini не равно false, и не является объектом WP_Error		
if ( $termini && ! is_wp_error( $termini ) ) {
 
	// все полученные элементы по ходу цикла мы будем класть в этот массив
	$termini_massiv = array();
 
	foreach ( $termini as $termin ) {
		// добавление элемента в массив
		$termini_massiv[] = '<a href="' . get_term_link( $termin ) . '" title="Перейти к ' . esc_attr( $termin->name ) .  '">' . $termin->name . '</a>';
	}
 
	// на данном этапе у нас имеется массив $termini_massiv, содержащий ссылки на все нужные термины	
	// используя функцию PHP join(), объединим элементы массива в строку, в качестве разделителя используем запятую с пробелом
	$termini_a_hrefs = join( ", ", $termini_massiv );
 
	// осталось только вывести блок ссылок
	echo '<div>Теги: <span>' . $termini_a_hrefs . '</span></div>';
}

Фильтр-хук get_the_terms

Позволяет изменить список терминов, полученных в результате действия функции. Появился в версии WP 3.1.0

add_filter( 'get_the_terms', 'true_get_the_terms_filter_cb', 10, 3 );
 
function true_get_the_terms_filter_cb( $terms, $post_id, $taxonomies ) {
	/*
	 * $terms - результат функции, либо массив терминов, либо false, либо WP_Error
	 * $post_id - ID поста (именно ID, здесь уже объекта не может быть)
	 * $taxonomies - название таксономии, либо массив из нескольких названий
	 */
 
	// к примеру мы можем сделать так, чтобы для поста с определенным ID термины не выводились
	if( 341 == $post_id ) {
		return false;
	}
}
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии