使用meta_query(WP)一次比较具有多个值的字段

时间:2015-01-18 12:37:35

标签: wordpress custom-post-type

我正在将trip_region CPT的trip自定义字段与数组的第一个元素进行比较:$filter_region[0]

我怎么可能在该数组中有更多元素,我需要选择trips字段等于 这些元素的trip_region。使用meta_query,是否可以同时将(与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' => $filter_region, 
            'compare' => 'IN'
        )
    )
));

EDIT(2):

用WP_Query替换get_posts并使用WP_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'))

对我来说很好,我不明白为什么它不起作用。

2 个答案:

答案 0 :(得分:0)

我认为您必须与 IN 进行比较,而不是 LIKE value必须包含数组
Here's文档。

$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'
        )
    )
));

答案 1 :(得分:0)

您可以使用比较。这是Meta_Query上的另一个WordPress Codex文档。