0

有没有办法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_video和之间event_summary。其他一切都是相互独立的。这有可能吗?

谢谢

4

1 回答 1

1

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

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

因为我在 WP Codex 遇到它时并不高兴,所以我通过手动搜索代码来更深入地研究这个问题。所以我发现了解析参数的WP_Query调用。这是的类构造函数(您可以在 WP 3.6的行中找到它):WP_Meta_Querymeta_queryWP_Meta_Querywp-includes/meta.php643

/**
 * 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;
    }
}

长话短说,第二个if表明这个类只能与 a ORorAND关系一起使用,但永远不会与它们结合使用

因此,不幸的是,似乎不可能实现您想要做的事情(至少在 WP 3.6 之前)。我想你最好的办法是拆分主查询,首先执行特定的元查询,然后将它们的结果(返回metas)应用于你的主查询。

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

于 2013-09-24T00:24:59.677 回答