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

has_term() WP 3.1.0

Проверяет наличие у поста терминов, т.е. проверяет есть ли у поста метки/категорий/разделы (с учетом таксономии).

В качестве указания терминов, функции можно передавать в параметр $term: ID терминов, их названия или ярлыки (альтернативные названия). Переданные данные сравниваются с данными поста. Если передаются только ID, то сравниваться будут только идентификаторы (term_id).

Если не переданы никакие термины для сравнения, то функция будет проверять присвоены ли посту хоть какие-нибудь термины.

Если нужно проверить наличие меток у поста используйте аналогичную функцию has_tags().

Используется в: has_category(), has_post_format(), has_tag(), in_category().
Работает на основе: is_object_in_term()
✈ 1 раз = 0.003337с = очень медленно | 50000 раз = 0.82с = очень быстро PHP 7.1.5, WP 4.8.1

Хуков нет.

Возвращает

true или false, а зависимости от выполнения условия.

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

if( has_term( $term, $taxonomy, $post ) ){
	 ... 
}
$term(строка/массив/число)
Термины который нужно проверить. Можно указать: название, ярлык, ID или массив из этих элементов.
По умолчанию: ''
$taxonomy(строка)
Название таксономии в которой проверять термины.
По умолчанию: ''
$post(число/объект)
Пост, наличие терминов у которого проверять. По умолчанию проверяется у текущего поста.
По умолчанию: null (global $post)

Примеры

#1. Проверим есть ли у текущей записи какие-либо термины в таксономии videos:

if( has_term('', 'video') )
	echo "Запись имеет термины в таксономии `video`";

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

if( has_term('', 'post_tag') )
	echo "У текущей записи есть метки";

Так, мы просто проверим есть ли у текущей записи обычные метки, которые по умолчанию используются в WordPress (термины в таксономии post_tag). Заменить этот пример можно условным тегом if( has_tags() ).

#2. Проверим есть ли у текущей записи термин triller, который находится в таксономии video:

if( has_term('triller', 'video') )
	echo "Запись имеет термин `triller` в таксономии `video`";

#3. Проверка наличия нескольких терминов

Проверим, находится ли запись 59 в терминах comedy или history, которые относятся к таксономии video:

if( has_term(array('comedy','history'), 'video', 59) )
	echo "Запись с ID=59 имеет термины `comedy` и `history` в таксономии `video`";

Код has term: wp-includes/category-template.php WP 4.8.2

<?php
function has_term( $term = '', $taxonomy = '', $post = null ) {
	$post = get_post($post);

	if ( !$post )
		return false;

	$r = is_object_in_term( $post->ID, $taxonomy, $term );
	if ( is_wp_error( $r ) )
		return false;

	return $r;
}

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

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

Еще из метки: Условные теги (все)

Еще из раздела: Для записей

has_term 1 комментарий
  • Dayks @

    Здравствуйте. Возможно вопрос не по теме статьи, но в поисках решения попал именно сюда. Подскажите пожалуйста можно ли подсветить метки открытого поста в облаке в сайдбаре? Нашел вот такой код

    add_filter( 'wp_tag_cloud', 'my_highlight_tags' );
    function my_highlight_tags($cloud) {
    	global $wpdb;
    	$tags = single_tag_title('', false);
    	$tags_array = explode(" + ", $tags);
    	foreach ($tags_array as $tag_name) {
    		$tag_id = $wpdb->get_var("SELECT term_id FROM $wpdb->terms WHERE name = '".$tag_name."'");
    		$cloud = str_replace( "tag-link-$tag_id", "tag-link-$tag_id current-term", $cloud);
    	}
    	return $cloud;
    }

    После его применения и настройки класса

    .curent-term

    подсветить получается метку, на которую ты нажал, то есть на странице "все записи с меткой ...". А вот если нужно подсветить метки открытого поста что делать? Надеюсь решение есть и Вы сможете им поделиться. Жду с нетерпением, спасибо.

    Ответить4.8 года назад #

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

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