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

get_the_term_list() WP 2.5

Выводит список ссылок на элементы таксономии (например метки), относящиеся к определенному посту.

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

Используется в: get_the_tag_list(), the_terms().
Работает на основе: get_the_terms()
✈ 1 раз = 0.004471с = очень медленно | 50000 раз = 5.31с = быстро PHP 7.1.2, WP 4.7.3
Хуки из функции:
Возвращает

Строку/false/WP_Error.

  • Строку - список элементов таксономии в виде ссылок на соответствующие страницы архивов.

  • false, если не удалось получить элементы таксономии.

  • Объект WP_Error, если не удалось получить ссылку на любой из полученных элементов таксономии. Это редкий случай и связан с ошибкой в структуре WordPress...

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

get_the_term_list( $id, $taxonomy, $before, $sep, $after );
$id(число) (обязательный)
ID поста, элементы таксономии которого нужно получить.
$taxonomy(строка) (обязательный)
Название таксономии, элементы которой нужно получить.
$before(строка)
Текст, который будет показан перед списком.
По умолчанию: ''
$sep(строка)
Текст-разделитель, который будет показан между выводимыми элементами (тегами).
По умолчанию: ''
$after(строка)
Замыкающий текст (текст в конце списка).
По умолчанию: ''

Примеры

#1. Список элементов таксономии

Такой код можно использовать внутри Цикла WordPress, чтобы вывести на экран элементы (метки) таксономии "heroes" для каждого поста:

<?php echo get_the_term_list( $post->ID, 'people', 'Знаменитости: ', ',', '' ); ?>

В результате мы получим примерно следующий список для каждого поста:

Знаменитости:
<a href="person1">Эминем</a>, 
<a href="person2">Дуэйн Джонсон</a>, 
...

Код get the term list: wp-includes/category-template.php WP 4.8.2

<?php
function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = '' ) {
	$terms = get_the_terms( $id, $taxonomy );

	if ( is_wp_error( $terms ) )
		return $terms;

	if ( empty( $terms ) )
		return false;

	$links = array();

	foreach ( $terms as $term ) {
		$link = get_term_link( $term, $taxonomy );
		if ( is_wp_error( $link ) ) {
			return $link;
		}
		$links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>';
	}

	/**
	 * Filters the term links for a given taxonomy.
	 *
	 * The dynamic portion of the filter name, `$taxonomy`, refers
	 * to the taxonomy slug.
	 *
	 * @since 2.5.0
	 *
	 * @param array $links An array of term links.
	 */
	$term_links = apply_filters( "term_links-{$taxonomy}", $links );

	return $before . join( $sep, $term_links ) . $after;
}

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

Из метки: Список (wp_list списки)

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

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

get_the_term_list 7 комментариев
  • Андрей

    Тимур, подскажи пожалуйста, как поменять атрибуты в ссылках функции get_the_term_list.
    Я вроде нашел что-то вроде на эту тему, но как прикрутить не знаю:

    function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = '' ) {
    	$terms = get_the_terms( $id, $taxonomy );
    
    	if ( is_wp_error( $terms ) )
    		return $terms;
    
    	if ( empty( $terms ) )
    		return false;
    
    	foreach ( $terms as $term ) {
    		$link = get_term_link( $term, $taxonomy );
    		if ( is_wp_error( $link ) )
    			return $link;
    		$term_links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>';
    	}
    
    	$term_links = apply_filters( "term_links-$taxonomy", $term_links );
    
    	return $before . join( $sep, $term_links ) . $after;
    }
    Ответить3.8 года назад #
    • Kama4486

      Вы код функции get_the_term_list нашли...

      Вам нужно через фильтр "term_links-$taxonomy" отфильтровать вывод. Допустим вы выводите ссылки из таксономии mytax, тогда как-то так:

      function change_attr_in_list_of_mytax( $term_links ){
      	$out = array();
      	foreach( $term_links as $link )
      		$out[] = str_replace('rel="tag"', 'rel="nofollow"', $link);
      
      	return $out;
      }
      add_filter('term_links-mytax', 'change_attr_in_list_of_mytax');

      Где в term_links-mytax, mytax - название вашей таксономии.

      Замена происходит тут:

      str_replace('rel="tag"', 'rel="nofollow"', $link);

      Этот код вызываете до того как вызвать функцию. Можно его в functions.php скопировать.

      1
      Ответить3.7 года назад #
  • Smile

    Добрый день, подскажите пожалуйста мне использовал код
    echo get_the_term_list( $post->ID, 'brandy-detmir');

    Получил примерно такое значение
    Эминем, Дуэйн Джонсон,

    Как можно записать значение Эминем в переменную, без ссылок, и без остальных значении. Мне нужно ток первое значение записать в переменную.

    Заранее благодарен

    Ответить1.4 года назад #
    • Kama4486

      Используйте get_the_terms()

      $cur_terms = get_the_terms( $post_id = 10, $taxonomy = 'my_tax' );
      $first_term = $cur_terms ? array_shift($cur_terms) : false;
      1
      Ответить1.4 года назад #
  • Максим

    Немного помучился с этой функцией, она, как посмотрел в кодексе, еще может возвращать еще одно значение - false, если не удалось выбрать элементы таксономии

    1
  • Юрец cайт: виртуальная-жд.рф @

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

    Ответить2 месяца назад #

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

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