Функция GET_OBJECTS_IN_TERM(): извлечение ID объектов из таксономии

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

Функция get_objects_in_term() позволяет извлекать идентификаторы объектов (ID) из заданной таксономии и термина. Эта функция особенно полезна для работы с категориями и метками в WordPress.

## Как работает функция?

Перед использованием функции необходимо убедиться, что переданные строки $taxonomies существуют. Если таксономия недействительна, функция вернёт ошибку типа WP_Error.

Для $terms нет таких строгих проверок, но они всё равно должны существовать, чтобы функция смогла вернуть идентификаторы объектов.

Также можно изменить порядок возвращаемых идентификаторов объектов, используя параметры $args, указав 'ASC' для восходящего или 'DESC' для нисходящего порядка. Значение указывается в ключе 'order'.

### Время выполнения функции

- Один раз — 0.000449 секунды (быстро)
- 50 000 раз — 13.14 секунды (медленно)
- PHP 7.1.2, WP 4.7.5

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

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

## Использование функции

```php
get_objects_in_term( $term_ids, $taxonomies, $args );
  • $term_ids (int|int[]) (обязательно): ID термина или массив идентификаторов термина.
  • $taxonomies (string|string[]) (обязательно): название таксономии или массив названий таксономий.
  • $args (array|string): параметры для изменения порядка идентификаторов объектов.
    • order (string): Порядок получения терминов. Принимает 'ASC' или 'DESC'. По умолчанию 'ASC'.

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

Пример 1: Получение ID всех записей из категории

Получим идентификаторы записей из категории с ID 33:

$post_ids = get_objects_in_term( 33, 'category' );

print_r( $post_ids );
/*
Array (
    [0] => 72
    [1] => 372
    [2] => 800
)
*/

Пример 2: Получение ID всех записей из нескольких таксономий

Здесь 33 — это элемент таксономии 'category', а 12 — элемент таксономии 'post_tag':

$objects = get_objects_in_term( [33, 12], ['category', 'post_tag'] );

print_r( $objects );
/*
Array (
    [0] => 72
    [1] => 372
    [2] => 800
    [3] => 2818
    [4] => 2971
    [5] => 3755
)
*/

Пример 3: Проверка возвращаемого значения

Проверим возвращаемое значение:

$objects = get_objects_in_term( [33, 12], ['category', 'post_tag'] );

if (is_wp_error($objects)) {
    echo 'Таксономия неверна';
} elseif (!$objects) {
    echo 'Нет объектов';
} else {
    echo 'Есть объекты!';
    print_r($objects);
}

Пример 4: Список всех меток записей из заданной категории

Получим список всех меток записей, которые находятся в указанной категории (в данном случае — текущей категории):

if (is_category()) {
    $term_id = get_queried_object_id(); // ID текущей категории
    $term_ids = get_term_children($term_id, 'category'); // соберем ID всех дочерних категорий
    array_push($term_ids, $term_id); // добавим ID текущей категории

    $post_ids = get_objects_in_term($term_ids, 'category');

    if ($post_ids && !is_wp_error($post_ids)) {
        $tags = wp_get_object_terms($post_ids, 'post_tag');

        if ($tags && !is_wp_error($tags)) {
            $list = [];
            foreach ($tags as $tag) {
                $list[] = ''. esc_html($tag->name) .'';
            }

            echo '
  • '. implode("
  • n
  • ", $list) .'
'; } } }

Примечания

  • Глобальные переменные: wpdb — это объект абстракции базы данных WordPress.

Журнал изменений

  • С версии 2.3.0: Функция была введена в WordPress.

Leave a Reply

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