Получение терминов из таксономий с помощью WP_GET_OBJECT_TERMS()

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_args
  • get_object_terms
  • wp_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.

    Leave a Reply

    Ваш адрес email не будет опубликован. Обязательные поля помечены *