有没有办法让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
。其他一切都是彼此独立的。这有可能吗?
由于
答案 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;
}
}
表示此类只能使用if
或OR
关系,但 永远不会两者结合起来。
所以,不幸的是,似乎不可能实现你想要做的事情(至少在WP 3.6之前)。我想您最好的选择是拆分主查询,首先执行特定的Meta Queries,然后将结果(返回AND
)应用到主查询。
我知道这不是解决方案,而是答案。不过,我希望这可以帮助你找到解决这个问题的方法。