Как использовать germ_terms() с meta_query для таксономического поля ACF?

Вопрос или проблема

У меня есть пользовательская таксономия событий (“event”).

Через ACF у нее также есть поле таксономии “Topic”, связывающее ее со вторичной таксономией Topic (“topic”).

Я хочу get_terms() для всех терминов событий, которые имеют конкретный термин “Topic” “Media”, у которого ID термина 422.

Я знаю, что get_terms() может принимать meta_query, но не понимаю, как правильно получить то, что мне нужно.

Оба из этих запросов не возвращают результатов…

'meta_query' => array(
        array(
          'key'     => 'Topic',
          'value'   => '422',
        )
      )

'meta_query' => array(
        array(
          'key'     => 'Topic',
          'value'   => 422,
        )
      )

Для сведения, значение возврата моего поля таксономии “Topic” ACF установлено на “ID термина”, вот почему я пытался передать ‘422’.

Как оказывается, чтобы протестировать, когда я…

– выполняю get_terms() без meta_query

– затем использую get_term_meta() для получения “Topic” терминов

– затем выводим результат…

… я вижу формулировку вроде Array ( [0] => Array ( [0] => 422 ) )

Вот где спрятан 422.

Ответ – правильная формулировка…

'meta_query' => array(
array(
'key' => 'Topic',
'value' => "12057",
'compare' => 'LIKE'
)
)

Полная версия:

` $args = array(
‘taxonomy’ => ‘event’,
// ‘order’ => ‘ASC’,
‘hide_empty’ => false,
‘hierarchical’ => true,
// ‘parent’ => 0,

  'meta_query' => array(
    array(
      'key'     => 'Topic',
      'value'   => "12057",
      'compare' => 'LIKE'
    )
  )


);

$events = get_terms( $args );`

Конкретно, похоже, что 'compare' => 'LIKE' должен присутствовать.

Изначально я думал, что решение состоит в том, чтобы использовать двойные кавычки для значения, что я вывел из ответа @hube2 на другой вопрос.

Но на самом деле это работает как с одинарными, так и с двойными. Ключевым моментом является наличие 'compare' => 'LIKE'.

'compare' => 'IN' Поскольку вы сравниваете с одним значением, вы можете использовать IN в качестве оператора сравнения.

$args = array(
    'taxonomy' => 'event',
    'meta_query' => array(
        array(
            'key' => 'topic', // Meta key для поля ACF Taxonomy
            'value' => 422, // ID термина для сравнения
            'compare' => 'IN', // Сравнить с любым из предоставленных значений
        ),
    ),
);

$terms = get_terms( $args );

Ответ или решение

Чтобы использовать функцию get_terms() в сочетании с meta_query для получения терминов пользовательской таксономии, связанной с полем таксономии ACF, вам нужно учитывать несколько нюансов. Рассмотрим шаг за шагом процесс, чтобы вы могли эффективно получать термины из вашей таксономии "События" с учетом выбранной таксономической темы "Медиа".

Описание задачи

Вы создали пользовательскую таксономию "События" (или "event") и связали её с другой таксономией "Тема" (или "topic") через поле "Тема" в ACF. Ваша цель — извлечь все термины "События", которые соответствуют определённому термину "Тема", в данном случае — "Медиа", у которого ID термина равен 422.

Основные детали работы с meta_query

Когда вы работаете с ACF и хотите применять meta_query, очень важно правильно указать ключ поля и соответствующее значение. В вашем случае поле "Тема" возвращает массив значений, поскольку в ACF возможно сохранение нескольких значений. Давайте рассмотрим правильный подход.

Корректный код

Вот пример рабочего кода, который поможет решить вашу задачу:

$args = array(
    'taxonomy'   => 'event', // Указываем пользовательскую таксономию
    'hide_empty' => false,    // Показать все термины, даже если они пусты
    'meta_query' => array(
        array(
            'key'     => 'topic', // Ключ мета-поля для ACF
            'value'   => 422,     // ID термина для соответствия
            'compare' => 'IN',    // Сравнение, так как это массив
        ),
    ),
);

$terms = get_terms($args);

if (!empty($terms) && !is_wp_error($terms)) {
    // Обработка полученных терминов
    foreach ($terms as $term) {
        echo $term->name . '<br>'; // Вывод имени термина
    }
} else {
    echo 'Нет зарегистрированных терминов.';
}

Пояснения к коду

  1. Ключ мета-поля: Убедитесь, что вы используете правильное название ключа мета-поля. В данном случае это topic.

  2. Значение: При передаче ID термина в value, используйте его как есть (например, 422), поскольку ACF возвращает ID термина.

  3. Оператор сравнения: Использование 'compare' => 'IN' будет иметь смысл в случае, если вы работаете с массивом значений, что часто происходит с полями ACF типа "таксономия".

  4. Проверка ошибок: После получения терминов рекомендуется проверять, не возникают ли ошибки, чтобы избежать потенциальных проблем.

Заключение

Следуя вышеизложенным шагам, вы сможете успешно извлечь термины из вашей пользовательской таксономии "События" с помощью ACF. Правильное использование meta_query, равно как и корректные значения и ключи, позволят вам получить нужные данные без лишних усилий.

Оцените материал
Добавить комментарий

Капча загружается...