我在比较trip_region
我的自定义字段trip
CPT到数组的第一个元素:$filter_region[0]
.
但是,该数组中可能有更多元素,我需要选择trips
谁的trip_region
字段等于这些元素中的任何一个。是否可以使用meta\\u查询(使用OR,而不是AND)一次将字段与多个值进行比较?因为这里没有这样的东西the doc.
$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\'
)
)
));
编辑(2):
将get\\u posts替换为WP\\u Query,并使用WP\\u Query的request属性,我看到这里正在执行以下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\\"%\'
SO网友:Sjors Roelofs
参数“meta\\u query”是一个数组,因此可以添加多个元键。在里面the doc, 截面下方"Example: Multiple Meta Entries - Multi dimensional array", 您可以找到一个将关系设置为“或”的示例:
$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\'
),