Функция нужна для получения элементов таксономий (рубрик, меток и т.д) постов (записей, страниц или постов произвольного типа).
Очень похожа на функцию wp_get_post_terms().
Возвращает:
wp_get_object_terms( $object_ids, $taxonomies, $args = array() )
Параметры
- $object_ids
- (целое|массив) ID поста или массив из ID постов, термины которых нужно получить.
- $taxonomies
- (строка|массив) Название таксономии или нескольких таксономий в виде массива, термины которых нужно получить.
- $args
- (массив) Массив аргументов, можно использовать любые параметры функции get_terms().
Пример
В качестве примера предположим, что у нас с вами установлен плагин 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().
Хуки
Внутри функции есть несколько фильтров, которые позволяют изменить передаваемые в функцию параметры или возвращаемый результат.
wp_get_object_terms_args
Этот хук позволяет изменить значения в массиве $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
get_object_terms
Позволяет отфильтровать термины, возвращаемые функцией.
Допустим, что нам нужно исключить какой-то определённый термин, например с 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
wp_get_object_terms
Является практически полной копией фильтра get_object_terms, с тем лишь исключением, что параметры $object_ids
и $taxonomies
являются строками, в которых ID (или названия таксономий) разделены запятыми.
С версии 2.8.0