Intereting Posts
Есть ли способ указать пункты меню, чтобы заставить URL-адреса, отличные от SSL? Пользовательский плагин Permalink и текущая страница / Предки в меню Dev, Stage и Production Deployment для сайтов WordPress? Задача проверки Google с расположением файла Как показать пользовательский статический контент в верхней части каждой страницы категории? как «manage_posts_custom_column» action hook относится к «manage _ $ {post_type} _columns» hook hook? Сделать custom_post translatable Использование preg_replace () с фильтром the_content Лучший многоязычный плагин WordPress? Исключить скрипты из плагина Пользовательский фильтр для основного поиска: как исключить определенный post_type из результатов поиска Как получить сообщения, упорядоченные по их категориям? Портфолио-шаблон не будет показывать элементы Извлечение адреса из пользовательского сообщения через Javascript для API Карт Google Сортировка / Фильтр сообщений от front-end в блоге WordPress

Сравнение поля с несколькими значениями одновременно с 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' ),