Функция get_object_taxonomies() в WordPress: назначение и примеры использования

# Функция GET_OBJECT_TAXONOMIES() │ WP 2.3.0

Функция get_object_taxonomies() возвращает названия или объекты таксономий, которые зарегистрированы для запрашиваемого объекта или типа объекта (например, для поста).

## Пример использования

```php
$taxonomies = get_object_taxonomies('post');

Этот код вернет:

Array( 'category', 'post_tag' )

Используется в

  • is_object_in_taxonomy()
  • get_the_taxonomies()

Время выполнения:
1 раз — 0.0000272 сек (очень быстро) | 50000 раз — 0.19 сек (очень быстро)

Версия PHP: 7.4.25, Версия WordPress: 6.0.1

Hooks: нет

Возвращаемое значение

Функция возвращает массив, который содержит названия или объекты всех таксономий для указанного типа объекта.

Синтаксис

get_object_taxonomies($object_type, $output);
  • $object_type (обязательный) — имя типа объекта таксономии или объект (например, пост).
  • $output — тип возвращаемого значения. Принимает значения 'names' (названия) или 'objects' (объекты). По умолчанию: 'names'.

Примеры работы функции

Пример 1: Названия таксономий для типа поста

$taxonomy_names = get_object_taxonomies('post');
print_r($taxonomy_names);

Результат:

Array
(
    [0] => category
    [1] => post_tag
    [2] => post_format
)

Пример 2: Объекты таксономий для типа поста

Для получения таксономий в виде объектов для каждого типа поста:

$taxonomy_objects = get_object_taxonomies('post', 'objects');
print_r($taxonomy_objects);

Результат:

Array
(
    [category] => stdClass Object
    (
        [hierarchical] => 1
        [update_count_callback] => 
        [rewrite] => 
        [query_var] => category_name
        [public] => 1
        [show_ui] => 1
        [show_tagcloud] => 1
        [_builtin] => 1
        [labels] => stdClass Object
        (
            ...
        )
        ...
        [name] => category
        [label] => Categories
    )
    ...
)

Пример 3: Названия таксономий для объекта поста

Чтобы получить названия таксономий, поддерживаемых текущим постом, нужно передать полное значение объекта поста вместо имени типа:

add_action('wp_head', 'get_current_post_taxonomies');

function get_current_post_taxonomies() {
    global $post;

    $taxonomy_names = get_object_taxonomies($post);
    print_r($taxonomy_names);
}

Результат:

Array
(
    [0] => category
    [1] => post_tag
    [2] => post_format
)

Пример 4: Получение таксономий для нескольких типов постов

Можно получить таксономии для нескольких типов постов сразу без использования цикла. Например, если у нас есть два типа постов с таксономиями: post (стандартный) и mypost (пользовательский), то:

$tax_names = get_object_taxonomies(['post', 'mypost']);

Результат:

Array
(
    [0] => category    // таксономия для поста
    [1] => post_tag    // таксономия для поста
    [2] => post_format // таксономия для поста
    [3] => mypost_tag  // таксономия для mypost
    [4] => mypost_cat  // таксономия для mypost
)

Если нужно получить все данные как объекты, а не только названия, то:

$tax_names = get_object_taxonomies(['post', 'mypost'], 'objects');

Примечания

  • Глобальная переменная: $wp_taxonomies — зарегистрированные таксономии.

Изменения

Функция была добавлена в версии 2.3.0.

Код функции

function get_object_taxonomies($object_type, $output = 'names') {
    global $wp_taxonomies;

    if (is_object($object_type)) {
        if ('attachment' === $object_type->post_type) {
            return get_attachment_taxonomies($object_type, $output);
        }
        $object_type = $object_type->post_type;
    }

    $object_type = (array) $object_type;

    $taxonomies = array();
    foreach ((array) $wp_taxonomies as $tax_name => $tax_obj) {
        if (array_intersect($object_type, (array) $tax_obj->object_type)) {
            if ('names' === $output) {
                $taxonomies[] = $tax_name;
            } else {
                $taxonomies[$tax_name] = $tax_obj;
            }
        }
    }

    return $taxonomies;
}

Leave a Reply

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