WP_GET_OBJECT_TERMS() │ WP 2.3.0
Функция wp_get_object_terms() используется для получения связанных с конкретным объектом (например, постом) терминов из заданных таксономий. Таксономии — это категории, метки и другие группы, которые помогают организовать контент в WordPress.
Подробности использования
- Использует:
get_terms() - Используется в:
get_the_terms(),get_the_taxonomies(),is_object_in_term(),wp_get_post_terms(),wp_get_post_categories()
Время выполнения
- 1 раз — 0.003926 сек (очень медленно)
- 50000 раз — 8.64 сек (быстро)
- PHP: 7.1.2, WP: 4.8
Хуки функции
wp_get_object_terms_argsget_object_termswp_get_object_terms
Возвращаемое значение
Функция возвращает массив терминов, их количество, либо объект WP_Error, если указанная таксономия не существует. Подробности см. в WP_Term_Query::get_terms().
Синтаксис функции
wp_get_object_terms( $object_ids, $taxonomies, $args );
Параметры
- $object_ids (обязательный) — ID объекта(ов), для которых нужно получить термины. Это может быть целое число или массив чисел.
- $taxonomies (обязательный) — имена таксономий, из которых нужно получить термины. Это может быть строка или массив строк.
- $args (опциональный) — массив или строка. Дополнительные аргументы. По умолчанию — пустой массив.
Примеры использования
Пример 1: Получение всех элементов таксономии 'product_categories'
Получим термины таксономии product_categories для текущего поста:
$product_cats = wp_get_object_terms( $post->ID, 'product_categories' );
Пример 2: Получить список элементов таксономии 'product' для поста
$product_terms = wp_get_object_terms( $post->ID, 'product' );
if( $product_terms && ! is_wp_error( $product_terms ) ){
$lis = [];
foreach( $product_terms as $term ){
$lis[] = ''. esc_html( $term->name ) .' ';
}
echo ''. implode( "n", $lis ) .'
';
}
Пример 3: Получить верхний элемент таксономии для текущего поста в цикле
См. описание в get_the_terms().
Изменения
- С версии 2.3.0 — введена функция.
- С версии 4.2.0 — добавлена поддержка значений 'taxonomy', 'parent' и 'term_taxonomy_id' для параметра
$orderby. Введен аргумент$parent. - С версии 4.4.0 — добавлены аргументы
$meta_queryи$update_term_meta_cache. Когда$fieldsравен 'all' или 'all_with_object_id', возвращается массив объектовWP_Term. - С версии 4.7.0 — изменена реализация с использованием
WP_Term_Query, поддерживаются аргументыWP_Term_Query. - С версии 6.3.0 — аргумент
update_term_meta_cacheпо умолчанию равен false, что не позволяет кэшировать метаданные термина.
Код функции
function wp_get_object_terms( $object_ids, $taxonomies, $args = array() ) {
if ( empty( $object_ids ) || empty( $taxonomies ) ) {
return array();
}
if ( ! is_array( $taxonomies ) ) {
$taxonomies = array( $taxonomies );
}
foreach ( $taxonomies as $taxonomy ) {
if ( ! taxonomy_exists( $taxonomy ) ) {
return new WP_Error( 'invalid_taxonomy', __( 'Неверная таксономия.' ) );
}
}
if ( ! is_array( $object_ids ) ) {
$object_ids = array( $object_ids );
}
$object_ids = array_map( 'intval', $object_ids );
$defaults = array(
'update_term_meta_cache' => false,
);
$args = wp_parse_args( $args, $defaults );
$args = apply_filters( 'wp_get_object_terms_args', $args, $object_ids, $taxonomies );
$terms = array();
if ( count( $taxonomies ) > 1 ) {
foreach ( $taxonomies as $index => $taxonomy ) {
$t = get_taxonomy( $taxonomy );
if ( isset( $t->args ) && is_array( $t->args ) && array_merge( $args, $t->args ) != $args ) {
unset( $taxonomies[ $index ] );
$terms = array_merge( $terms, wp_get_object_terms( $object_ids, $taxonomy, array_merge( $args, $t->args ) ) );
}
}
} else {
$t = get_taxonomy( $taxonomies[0] );
if ( isset( $t->args ) && is_array( $t->args ) ) {
$args = array_merge( $args, $t->args );
}
}
$args['taxonomy'] = $taxonomies;
$args['object_ids'] = $object_ids;
if ( ! empty( $taxonomies ) ) {
$terms_from_remaining_taxonomies = get_terms( $args );
if ( ! empty( $args['fields'] ) && str_starts_with( $args['fields'], 'id=>' ) ) {
$terms = $terms + $terms_from_remaining_taxonomies;
} else {
$terms = array_merge( $terms, $terms_from_remaining_taxonomies );
}
}
$terms = apply_filters( 'get_object_terms', $terms, $object_ids, $taxonomies, $args );
$object_ids = implode( ',', $object_ids );
$taxonomies = "'" . implode( "', '", array_map( 'esc_sql', $taxonomies ) ) . "'";
return apply_filters( 'wp_get_object_terms', $terms, $object_ids, $taxonomies, $args );
}
Сопутствующие функции
- term (термины таксономии)
category_exists()get_term()get_term_by()get_term_children()get_term_field()get_term_link()get_terms()get_the_term_list()get_the_terms()has_term()is_object_in_term()tag_exists()the_terms()wp_delete_object_term_relationships()wp_delete_term()wp_get_term_taxonomy_parent_id()wp_insert_category()wp_insert_term()wp_set_object_terms()wp_set_post_terms()WP_Tax_Query()WP_Term()WP_Term_Query()wp_update_term()wp_update_term_count()
Теперь вы имеете полное представление о функции wp_get_object_terms() и её использовании в WordPress.