我正在尝试在WordPress中设置查询,以返回来自不同帖子类型的组合结果,以及适用于每种帖子的meta_queries。在这种情况下,我希望获取标准帖子,其相应的meta_query
(自定义字段)为'related_'.$post_type'
,以及{em之后的event
自定义帖子类型 当前日期。我的查询如下,虽然似乎可以正确获取标准帖子,但它显示的是所有事件,而不仅仅是即将发生的事件:
$args = array(
'post_type' => array('post', 'event'),
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => $limit,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'related_'.$post_type,
'value' => $post_id,
'compare' => 'LIKE',
),
array(
'key' => 'event_start_date',
'type' => 'DATE',
'value' => current_time('Ymd'),
'compare' => '>=',
),
)
);
这是可以在单个查询中完成的吗,还是需要对带有相应meta_queries的帖子和事件进行单独的查询,并合并结果数组?还是可以更好地组织查询以使每个meta_query与其各自的帖子类型对齐?感谢您的协助。
答案 0 :(得分:1)
您可以查询多种帖子类型:
post_type (string / array) - use post types. Retrieves posts by Post Types, default value is 'post'. If 'tax_query' is set for a query, the default value becomes 'any';
编辑:我有一种感觉,您应该使用YYYY-MM-DD
mysql日期格式,但是您是对的-current_time()
接受Ymd
之类的PHP日期格式(同样为'mysql'
或'timestamp'
)。
查询的结构看起来很好-对我来说唯一奇怪的是您的'related _'。$ post_type自定义字段的值:
'key' => 'related_'.$post_type,
'value' => $post_id,
post_id实际上是自定义字段的值吗? postmeta表由以下内容组成:
meta_id
post_id
meta_key
meta_value
post_id通常也不是meta_value吗?
答案 1 :(得分:1)
我遇到了同样的问题。将meta_query
参数应用于具有多个post_types
的查询时,meta_query
参数将应用于所有帖子类型,因此,它仅返回包含所查询元字段的帖子。
例如,在执行带有以下wp_query
自变量的meta_query
时:
'meta_query' => array(
array(
'key' => 'agenda_date',
'value' => date('Ymd'),
'compare' => '>=',
),
)
仅返回post_type
中包含元字段“ agenda_date”的帖子。其他所有帖子都将被忽略。
如果删除了meta_query
参数,那么所有参数都可以正常工作,并且可以毫无问题地查询多种帖子类型('post_type' => 'agenda,post'
)。
摆弄relation
设置并模拟伪造的meta_query
参数似乎不起作用,因此唯一的解决方案是劫持SQL查询本身并修改JOIN
和WHERE
条查询语句。
可惜的是。