Благодаря этой функции вы можете вы вывести все метки, которые присвоены к посту, все рубрики, которым принадлежит пост (одновременно и метки и рубрики тоже можно), а также элементы других таксономий (иначе — термины).
Также хочу обратить ваше внимание на то, что эта функция не работает непосредственно с базой данных, прежде всего она пытается получить всё необходимое из кэша 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; } }