Вопрос или проблема
У меня есть пользовательская таксономия событий (“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 'Нет зарегистрированных терминов.';
}
Пояснения к коду
-
Ключ мета-поля: Убедитесь, что вы используете правильное название ключа мета-поля. В данном случае это
topic
. -
Значение: При передаче ID термина в
value
, используйте его как есть (например,422
), поскольку ACF возвращает ID термина. -
Оператор сравнения: Использование
'compare' => 'IN'
будет иметь смысл в случае, если вы работаете с массивом значений, что часто происходит с полями ACF типа "таксономия". -
Проверка ошибок: После получения терминов рекомендуется проверять, не возникают ли ошибки, чтобы избежать потенциальных проблем.
Заключение
Следуя вышеизложенным шагам, вы сможете успешно извлечь термины из вашей пользовательской таксономии "События" с помощью ACF. Правильное использование meta_query
, равно как и корректные значения и ключи, позволят вам получить нужные данные без лишних усилий.