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

## IS_OBJECT_IN_TERM() │ WP 2.7.0

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

### Описание функции

Данная функция проверяет, соответствует ли объект одним из переданных терминов по их идентификаторам, именам и слагам. Если термины задаются в виде целых чисел, проверяются только идентификаторы. Если термины не указаны, функция определяет, связан ли объект с любыми терминами в указанной таксономии.

### Использует:
- wp_get_object_terms()
- get_object_term_cache()

### Используется:
- has_term()

### Параметры возврата

Функция возвращает:
- true – если объект связан с одним из заданных терминов.
- false – если объект не связан с терминами.
- WP_Error – если был передан неверный ввод.

### Синтаксис использ��вания

```php
is_object_in_term( $object_id, $taxonomy, $terms );

Параметры:

  • $object_id (int) (обязательный) – ID объекта (например, ID записи).
  • $taxonomy (string) (обязательный) – имя таксономии.
  • $terms (int|string|int[]|string[]) – ID термина, его имя, слаг или массив таких значений для проверки.
    • По умолчанию: null.

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

Пример 1: Проверка на наличие термина для объекта (записи)

Давайте проверим, находится ли текущая запись ($post->ID) в термине Languages (слаг=langs или ID=5) в таксономии my_taxonomy:

$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 'langs' );

if ( $is_in ) {
    echo 'Запись связана с термином Languages';
}

// Также можно указать название термина (не слаг)
$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 'Languages' );

// Или ID
$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 5 );

Пример 2: Проверка на несколько терминов

Если вы хотите проверить связь с несколькими терминами сразу:

$is_in = is_object_in_term( $post->ID, 'my_taxonomy', [ 'Languages', 25 ] );

if( $is_in ){
    echo 'Запись связана с одним из терминов: Languages, 25';
}

Изменения в версии

  • С версии 2.7.0 – функция была введена в WordPress.

Код функции

Вот как выглядит код функции is_object_in_term() в WordPress:

function is_object_in_term( $object_id, $taxonomy, $terms = null ) {
$object_id = (int) $object_id;
if ( ! $object_id ) {
return new WP_Error( 'invalid_object', __( 'Неверный ID объекта.' ) );
}

$object_terms = get_object_term_cache( $object_id, $taxonomy );
if ( false === $object_terms ) {
    $object_terms = wp_get_object_terms( $object_id, $taxonomy, array( 'update_term_meta_cache' => false ) );
    if ( is_wp_error( $object_terms ) ) {
        return $object_terms;
    }

    wp_cache_set( $object_id, wp_list_pluck( $object_terms, 'term_id' ), "{$taxonomy}_relationships" );
}

if ( is_wp_error( $object_terms ) ) {
    return $object_terms;
}
if ( empty( $object_terms ) ) {
    return false;
}
if ( empty( $terms ) ) {
    return ( ! empty( $object_terms ) );
}

$terms = (array) $terms;

$ints = array_filter( $terms, 'is_int' );
if ( $ints ) {
    $strs = array_diff( $terms, $ints );
} else {
    $strs =& $terms;
}

foreach ( $object_terms as $object_term ) {
    // Если термин является целым числом, проверяем только идентификаторы терминов.
    if ( $ints && in_array( $object_term->term_id, $ints, true ) ) {
        return true;
    }

    if ( $strs ) {
        // Проверяем числовые строки только на идентификатор термина, чтобы избежать ложных совпадений.
        $numeric_strs = array_map( 'intval', array_filter( $strs, 'is_numeric' ) );
        if ( in_array( $object_term->term_id, $numeric_strs, true ) ) {
            return true;
        }

        if ( in_array( $object_term->name, $strs, true ) ) {
            return true;
        }
        if ( in_array( $object_term->slug, $strs, true ) ) {
            return true;
        }
    }
}

return false;

}



Теперь у вас есть понятное и структурированное руководство по использованию функции is_object_in_term() в WordPress. 

Leave a Reply

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