我正在尝试在首页网格上显示一些帖子。为此,我需要结合 2 个查询。我想展示
a)所有帖子'post_type' => 'project'
和
'post_type' => 'post'
b) 所有带有, 是'category__not_in' => array(1,4,5,6,8)
, 并且meta_key 'show_in_grid'
设置为的帖子1
它们以随机排序方式全部显示list
。
在它的 Wordpress 文档中WP_Query
说您可以执行以下操作:
$query = new WP_Query( 'meta_value=blue&post_type=page' );
但这似乎没有按预期工作。
如果我做:
'post_type=post&meta_key=show_in_grid&meta_value=1'
它只是忽略密钥是否设置为 1。
如果我做:
'post_type' => 'post',
'meta_query' => array(
array( 'key' => 'show_in_grid',
'value' => '1',
'compare' => '=')),
然后,一切都按预期工作。
这是文档中的错误吗?以及如何将 2 个不同的查询与逻辑 OR 相结合?我看到使用'relation'的tax_query有类似的东西。
回答
好的,多亏了这里的评论,我才开始工作:http ://wordpress.org/support/topic/multiple-queries-compiling-into-one-loop?replies=5#post-1929074
最终的解决方案是这样的:
<?php
// first query
$blogposts = get_posts(array(
'category' => 5,
'post_type' => 'post',
'meta_query' => array(
array('key' => 'show_in_grid',
'value' => '1',
'compare' => '=')),
'post_status' => 'publish',
'posts_per_page' => 1000
));
// second query
$projects = get_posts(array(
'post_type' => 'project',
'post_status' => 'publish',
'posts_per_page' => 1000
));
$mergedposts = array_merge( $blogposts, $projects ); //combine queries
$postids = array();
foreach( $mergedposts as $item ) {
$postids[]=$item->ID; //create a new query only of the post ids
}
$uniqueposts = array_unique($postids); //remove duplicate post ids
$args = array(
'post_type' => array('project','post'),
'post__in' => $uniqueposts,
'orderby' => 'rand'
);
$loop = new WP_Query($args);
while ( $loop->have_posts() ) : $loop->the_post();?>
出于某种奇怪的原因,必须在原始 2 个查询和最终查询中指定“post_type”,否则它将不起作用!?
希望这可以帮助某人.. :)