Функция wp_get_object_terms()
в WordPress используется для получения терминов (элементов таксономии), связанных с объектами (например, постами), в указанных таксономиях. Это мощный инструмент, который предоставляет широкий набор параметров для управления результатами.
wp_get_object_terms( int|int[] $object_ids, string|string[] $taxonomies, array|string $args = array() ): WP_Term[]|int[]|string[]|string|WP_Error
Параметры:
- $object_ids (int|int[]) (обязательный)
ID объекта или массив ID объектов, для которых нужно получить термины. - $taxonomies (string|string[]) (обязательный)
Название или массив названий таксономий, из которых нужно получить термины. - $args (array|string) (опциональный)
Дополнительные параметры для управления запросом. Поддерживает следующие параметры:- orderby (string)
Критерий сортировки:name
(по умолчанию)count
slug
term_group
term_order
none
- order (string)
Направление сортировки:ASC
(по умолчанию)DESC
- fields (string)
Какие данные вернуть:all
(по умолчанию) — полный объект термина (WP_Term[]
)ids
— только ID терминовnames
— только имена терминовslugs
— только ярлыки терминовall_with_object_id
— полный объект термина плюс ID объектаtt_ids
— ID таксономии термина
- meta_query (array)
Параметры для фильтрации по метаданным терминов (используется классWP_Meta_Query
). - update_term_meta_cache (bool)
Нужно ли обновлять кэш метаданных терминов.true
(по умолчанию до WP 6.3)false
(по умолчанию с WP 6.3).
- orderby (string)
Возвращаемое значение:
- Массив объектов терминов (
WP_Term[]
), строк, ID или объектWP_Error
в случае ошибки.
Пример 1: Получение терминов таксономии «product_categories» для текущего поста
$productcategories = wp_get_object_terms( $post->ID, 'product_categories' );
if ( ! empty( $productcategories ) ) {
echo '<ul>';
foreach ( $productcategories as $term ) {
echo '<li>' . esc_html( $term->name ) . '</li>';
}
echo '</ul>';
}
Пример 2: Получение всех терминов таксономии «product» и создание списка ссылок
$product_terms = wp_get_object_terms( $post->ID, 'product' );
if ( $product_terms && ! is_wp_error( $product_terms ) ) {
echo '<ul>';
foreach ( $product_terms as $term ) {
echo '<li><a href="' . esc_url( get_term_link( $term ) ) . '">' . esc_html( $term->name ) . '</a></li>';
}
echo '</ul>';
}
Пример 3: Получение ID терминов таксономии «download_tag» для текущего поста
$exclude_post_id = $post->ID;
$taxchoice = 'download_tag';
$custom_taxterms = wp_get_object_terms( $post->ID, $taxchoice, array('fields' => 'ids') );
// Далее можно использовать эти ID в WP_Query
$arguments = array(
'post_type' => 'download',
'post_status' => 'publish',
'posts_per_page' => 3,
'orderby' => 'rand',
'post__not_in' => array($post->ID),
'tax_query' => array(
array(
'taxonomy' => $taxchoice,
'field' => 'id',
'terms' => $custom_taxterms,
),
),
);
$post_query = new WP_Query( $arguments );
Советы по производительности:
Хотя wp_get_object_terms()
предоставляет гибкость в получении терминов, она не кэширует результаты. Это означает, что каждый вызов функции будет создавать новый запрос к базе данных. Для улучшения производительности при работе с постами рекомендуется использовать get_the_terms()
, которая кэширует результаты и экономит ресурсы, особенно в циклах запросов.
Заключение:
Функция wp_get_object_terms()
позволяет получить полную информацию о терминах, связанных с объектами, с помощью множества опций фильтрации и сортировки. Однако для простых задач, таких как получение терминов поста, лучше использовать кэшируемую функцию get_the_terms()
для оптимизации работы сайта.