Intereting Posts
Пользовательская позиция WordPress. Как я могу создать функцию контроллера для иерархии шаблонов? После отключения WPM multi валюты валюта по-прежнему обрабатывается WPML Как я могу проверить, насколько быстро или медленнее мой WordPress сайт? Добавить класс в комментарий формы div, когда нажата кнопка ответа-ответа Запретить дублирование запроса Перемещенная страница (новый родитель) правильно загружается с использованием устаревшего URI. Зачем? Где значения полей ввода раздела хранятся в базе данных Показывать рекламу по местоположению «Пункт не обновляется» при попытке изменить свойства категории Как переместить файлы ядра js в нижний колонтитул Неограниченные миниатюры высоты Содержимое getpost со всем форматированием для страниц администрирования Доступ к административной области WordPress временно отключен из-за широко распространенных атак с грубой силой Использование фильтров и действий для API-интерфейса плагина?

Сравнение поля с несколькими значениями одновременно с meta_query

Я сравниваю настраиваемое поле trip_region моей trip CPT с первым элементом массива: $filter_region[0] .

Однако у меня может быть больше элементов в этом массиве, и мне нужно выбрать trips , поле trip_region которых равно любому из этих элементов. Возможно ли, с meta_query, сравнивать (с OR, а не AND) поле с несколькими значениями одновременно? Потому что в доке нет ничего подобного.

 $get_trips_region = get_posts(array( 'post_type' => 'trip', 'meta_query' => array( array( 'key' => 'trip_region', 'value' => '"' . $filter_region[0] . '"', 'compare' => 'LIKE' ) ) )); 

РЕДАКТИРОВАТЬ:

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

 $get_trips_region = get_posts(array( 'post_type' => 'trip', 'meta_query' => array( array( 'key' => 'trip_region', 'value' => array($filter_region[0], $filter_region[1]), 'compare' => 'IN' ) ) )); 

EDIT (2):

Заменив get_posts WP_Query и используя свойство запроса WP_Query, я вижу, что здесь выполняется следующий SQL-запрос:

 SELECT SQL_CALC_FOUND_ROWS wp_15_posts.ID FROM wp_15_posts INNER JOIN wp_15_postmeta ON (wp_15_posts.ID = wp_15_postmeta.post_id) WHERE 1=1 AND wp_15_posts.post_type = 'trip' AND (wp_15_posts.post_status = 'publish' OR wp_15_posts.post_status = 'private') AND ( (wp_15_postmeta.meta_key = 'trip_region' AND CAST(wp_15_postmeta.meta_value AS CHAR) IN ('47','46','45')) ) GROUP BY wp_15_posts.ID ORDER BY wp_15_posts.post_date DESC LIMIT 0, 10 

Соответствующий проход Я предполагаю: (wp_15_postmeta.meta_key = 'trip_region' AND CAST(wp_15_postmeta.meta_value AS CHAR) IN ('47','46','45'))

Выглядит хорошо, я не понимаю, почему это не работает. Тот же проход с рабочей версией: LIKE '%\"45\"%'

Solutions Collecting From Web of "Сравнение поля с несколькими значениями одновременно с meta_query"

Параметр «meta_query» – это массив, поэтому вы можете добавить несколько мета-ключей. В документе , ниже раздела «Пример: множественные мета-записи – многомерный массив» , вы можете найти пример, где отношение установлено на «OR»:

 $query_args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'foo_key', // 'value' => 'foo', // 'compare' => 'LIKE', ), array( 'key' => 'bar_key', ), ) ); [...] 

Тогда запрос результата будет следующим:

 'join' => string ' INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id' (length=60) 'where' => string ' AND (wp_postmeta.meta_key = 'foo_key' OR wp_postmeta.meta_key = 'bar_key' )' (length=75) 

Если вы хотите проверить несколько значений с одним и тем же ключом, вы можете использовать массив и использовать «IN» для сравнения:

 array( 'key' => 'foo_key', 'value' => array('foo', 'bar'), 'compare' => 'IN' ),