Функция нужна для получения элементов таксономий (рубрик, меток и т.д) постов (записей, страниц или постов произвольного типа).
Очень похожа на функцию wp_get_post_terms().
Возвращает:
Если вы вызываете эту функцию несколько раз в итерациях цикла вывода постов, то притормозите, возможно get_the_terms() подойдёт вам больше, т.к она использует кэширование и работает быстрее.
wp_get_object_terms( $object_ids, $taxonomies, $args = array() )
В качестве примера предположим, что у нас с вами установлен плагин WooCommerce, а значит имеется произвольный тип поста product
(Товары) и таксономии product_category
(Категории товаров) и product_tag
(Метки товаров).
Попробуем получить все категории и метки товара с ID = 100;
$product_id = 100; $product_terms = wp_get_object_terms( $product_id, array( 'product_category', 'product_tag' ) ); // сначала проверим на ошибку WP_Error if ( ! is_wp_error( $product_terms ) ) { // теперь проверим, что термины по заданным критериям существуют if ( ! empty( $product_terms ) ) { // выводим их в виде маркированного списка echo '<ul>'; foreach( $product_terms as $term ) { echo '<li id="product-term-' . $term->term_id . '"><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>'; } echo '</ul>'; } } else { echo 'Вероятно WooCommerce не установлен.'; }
Ещё больше примеров – в описании функции wp_get_post_terms().
Внутри функции есть несколько фильтров, которые позволяют изменить передаваемые в функцию параметры или возвращаемый результат.
Этот хук позволяет изменить значения в массиве $args
для каждого использования wp_get_object_terms()
на сайте, а значит и функций, которые берут её за основу, например wp_get_post_terms().
Давайте изменим сортировку? Сделаем её по количеству постов, присвоенных в термин. И только для категорий (рубрик)!
add_filter( 'wp_get_object_terms_args', 'true_change_terms_ordering', 25, 3 ); function true_change_terms_ordering( $args, $object_ids, $taxonomies ) { if( in_array( 'category', $taxonomies ) ) { $args[ 'orderby' ] = 'count'; $args[ 'order' ] = 'DESC'; } return $args; }
С версии 4.9.0
Позволяет отфильтровать термины, возвращаемые функцией.
Допустим, что нам нужно исключить какой-то определённый термин, например с ID=55 или ярлыком private
.
add_filter( 'get_object_terms', 'true_remove_a_term', 25, 4 ); function true_remove_a_term( $terms, $object_ids, $taxonomies, $args ) { for( $i = 0; $i < count( $terms ); $i++ ) { if( 55 === $terms[$i]->term_id ) { // или 'private' === $terms[$i]->slug unset( $terms[$i] ); break; // элементы таксономий имеют уникальные ID, поэтому выходим из цикла } } $terms = array_values( $terms ); // обновляем индексы return $terms; }
С версии 4.2.0
Является практически полной копией фильтра get_object_terms, с тем лишь исключением, что параметры $object_ids
и $taxonomies
являются строками, в которых ID (или названия таксономий) разделены запятыми.
С версии 2.8.0
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.