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

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

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

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

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

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

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

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

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

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

// из условия понятно, что функция используется в цикле, а значит глобальная перменная $post->ID задана и содержит ID поста
$termini = get_the_terms( $post->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.

get_the_terms

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

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

Источник: misha.blog

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

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: