Благодаря этой функции вы можете вы вывести все метки, которые присвоены к посту, все рубрики, которым принадлежит пост (одновременно и метки и рубрики тоже можно), а также элементы других таксономий (иначе — термины).
Также хочу обратить ваше внимание на то, что эта функция не работает непосредственно с базой данных, прежде всего она пытается получить всё необходимое из кэша WordPress.
get_the_terms( $post, $taxonomy )
array('category','post_tag')
.В случае, если указанного вами поста не существует, либо ему просто не присвоено элементов заданных таксономий, функция возвращает false
. А также объект WP_Error при указании несуществующей таксономии.
Выводимые термины сортируются по имени по возрастанию.
Как я уже писал, функция возвращает массив объектов таксономий, как с этим работать — посмотрим на примере.
Ну и как всегда начнём от простого к сложному.
Для того, чтобы получить метки текущего поста, мы должны использовать эту функцию в цикле. Подробнее про циклы в моём видеоуроке.
$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().
Основная проблема это, вы не поверите, запятые, то есть если мы будем просто выводить элементы как в первом примере и добавим запятую после </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>'; }
Позволяет изменить список терминов, полученных в результате действия функции. Появился в версии 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; } }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
использую в цикле такую конструкцию:
Но ничего не выводится, не подскажите в чем может быть проблема?
print_r( $room_area )
что выводит?Выводит:
О, все дело было в точке с запятой)