我正在将我的trip
CPT的trip_region
自定义字段与数组的第一个元素进行比较:$filter_region[0]
.
但是,我可能在该数组中有更多元素,我需要选择trip_region
字段等于这些元素中的任何一个的trips
。是否可以使用 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' => $filter_region,
'compare' => 'IN'
)
)
));
编辑(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'))
对我来说看起来不错,我不明白为什么它不起作用。
我认为你必须与IN而不是LIKE进行比较。然后,value
必须包含一个数组。
这是文档。
$filter_region = array( 'Region 1', 'Region 2' );
$get_trips_region = get_posts(array(
'post_type' => 'trip',
'meta_query' => array(
array(
'key' => 'trip_region',
'value' => $filter_region,
'compare' => 'IN'
)
)
));
您可以使用比较。这是Meta_Query上的另一个WordPress Codex文档。