Get_the_terms() - элементы таксономий поста, WordPress
Опубликовано: 22.02.2018
Благодаря этой функции вы можете вы вывести все метки, которые присвоены к посту, все рубрики, которым принадлежит пост (одновременно и метки и рубрики тоже можно), а также элементы других таксономий (иногда их называют — термины ).
3 Adding custom taxonomies to a template
Также хочу обратить ваше внимание на то, что эта функция не работает непосредственно с базой данных , прежде всего она пытается получить всё необходимое из кэша WordPress.
get_the_terms ( $post , $taxonomy ) |
В случае, если указанного вами поста не существует, либо ему просто не присвоено элементов заданных таксономий, функция возвращает false. А также объект WP_Error при указании несуществующей таксономии.
XRP (Ripple) as a "base pair" on Binance? Get the terms straight, guys!
Выводимые термины сортируются по имени по возрастанию.
Примеры использования 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 ) ; |