meta_query
,每个具有不同的关系键?从Wordpress 3.0开始,tax_query
可以执行此功能;我想知道它是否与meta_query
等价。$results = query_posts( array(
'post_type' => 'event_id',
'meta_query' => array(
'relation' => 'AND',
array(
'relation' => 'OR',
array(
'key' => 'primary_user_id',
'value' => $user_id
),
array(
'key' => 'secondary_user_id',
'value' => $user_id
)
),
array(
'key' => 'date',
'value' => array( $start_date, $end_date ),
'type' => 'DATETIME',
'compare' => 'BETWEEN'
)
)
) );
参考文献:字段处理
查询多个分类并显示帖子数
导航如何在短代码中的自定义循环中工作?
#1 楼
问题是针对Wordpress 3.0的,但以防万一有人对来自Wordpress Codex的最新版本有相同的问题:以便构造复杂的查询。“https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters
因此,该查询应适用于当前的Wordpress版本。
#2 楼
这似乎是不可能的。如果我输入错了,请有人纠正我。 :if ( isset( $meta_query['relation'] ) && strtoupper( $meta_query['relation'] ) == 'OR' ) {
$this->relation = 'OR';
} else {
$this->relation = 'AND';
}
一种可能的解决方案是为此查询建立自己的JOIN。
$query = new WP_Query( array(
...
'my_meta_query' => true,
'suppress_filters' => false
) );
add_filter( 'posts_join', 'my_meta_query_posts_join', 10, 2 );
function my_meta_query_posts_join( $join, $query ) {
if ( empty( $query->query_vars['my_meta_query'] ) )
return $join;
global $wpdb;
$new_join = "
INNER JOIN {$wpdb->postmeta} pm1 ON 1=1
AND pm1.post_id = {$wpdb->posts}.ID
AND pm1.meta_key = '_some_meta_key'
AND pm1.meta_value = 'some_value'
";
return $join . ' ' . $new_join;
}
并且,如果需要进一步的验证和规则,还可以使用
meta_query
过滤器。#3 楼
同时,这是可能的,请参见带有示例和说明的文档:https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
和另一个示例https://wordpress.org/support/topic/ wp_query-with-multiple-meta_query /#post-9410992
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => '_price',
'value' => 1,
'compare' => '>=',
'type' => 'DECIMAL',
),
array(
'key' => '_price',
'value' => 3000,
'compare' => '<=',
'type' => 'DECIMAL',
),
),
array(
'relation' => 'AND',
array(
'key' => '_price',
'value' => 3001,
'compare' => '>=',
'type' => 'DECIMAL',
),
array(
'key' => '_price',
'value' => 6000, //fixed <= to =>
'compare' => '<=',
'type' => 'DECIMAL',
),
)
),
评论
似乎是@scribu在Core Trac上推荐的相同方法:core.trac.wordpress.org/ticket/20312
–安德鲁·奥德里(Andrew Odri)
2014年5月29日19:49
@AndrewOdri一样,但是不是=)
–vmassuchetto
2015年10月6日在17:14