Wordpress查询与子关系

时间:2013-09-23 18:38:19

标签: wordpress

有没有办法让meta_query有子关系?我不希望一个relation应用于所有查询的数组。

我试过这个,但无济于事:

'meta_query' => array(
    array(
        'key' => 'event_type',
        'value' => 'session',
        'compare' => 'LIKE'
    ),
    array(
        'relation' => 'OR',
        array(
            'key' => 'event_video',
            'value' => '0',
            'compare' => '>'
        ),
        array(
            'key' => 'event_summary',
            'value' => '',
            'compare' => '!='
        )
    ),
    array(
        'key' => 'event_date_single',
        'value' => '',
        'compare' => 'LIKE'
    ),
    array(
        'key' => 'event_start_time',
        'value' => '',
        'compare' => 'LIKE'
    )
)

所以'relation' => 'OR'应仅适用于event_videoevent_summary。其他一切都是彼此独立的。这有可能吗?

由于

1 个答案:

答案 0 :(得分:1)

看起来这可能是meta_query限制。 WP Codex表明您可以使用关系进行元查询,但据我所知,限制是您只能使用一种关系对于整个meta_query

这意味着您可以在OR参数之间建立完整的AND或完整的meta_query(默认)关系,但是您永远不能将它们组合在一起,这正是您想要的。

当我在WP Codex面对它时我不高兴,我通过手动搜索代码深入了解了这个问题。所以我发现WP_Query调用WP_Meta_Query来解析meta_query个参数。这是WP_Meta_Query的类构造函数(您可以在WP 3.6中的行wp-includes/meta.php的{​​{1}}中找到它):

643

长话短说,第二个/** * Constructor * * @param array $meta_query (optional) A meta query */ function __construct( $meta_query = false ) { if ( !$meta_query ) return; if ( isset( $meta_query['relation'] ) && strtoupper( $meta_query['relation'] ) == 'OR' ) { $this->relation = 'OR'; } else { $this->relation = 'AND'; } $this->queries = array(); foreach ( $meta_query as $key => $query ) { if ( ! is_array( $query ) ) continue; $this->queries[] = $query; } } 表示此类只能使用ifOR关系,但 永远不会两者结合起来

所以,不幸的是,似乎不可能实现你想要做的事情(至少在WP 3.6之前)。我想您最好的选择是拆分主查询,首先执行特定的Meta Queries,然后将结果(返回AND)应用到主查询。

我知道这不是解决方案,而是答案。不过,我希望这可以帮助你找到解决这个问题的方法。