我有两个循环,第一个是发布四个最近的帖子,而排除一个类别。第二个应该发布除第一个循环中的帖子以外的所有最新帖子。
最终发生的事情是,第一个循环发布了四个最新的帖子(这是我在寻找的,所以,是的!),但是第二个循环将在整个循环中运行两次,并且如果一个帖子在在第一个循环中,它将发布的帖子数量少于应有的数量。
例如,当第二个循环运行时,它从类别10中找到一个帖子,并按应有的方式显示它,然后从类别2中找到一个帖子,该类别在第一个循环中,它不会发布该帖子poss,但在找到两个可发布的帖子之前停止。
<div id="new-article-wrapper">
<?php
$new_articles = new WP_Query('cat=-10&posts_per_page=4');
//Array to save post IDs
$ids = array();
if ($new_articles->have_posts()) :
while ($new_articles->have_posts()) : $new_articles->the_post();
get_template_part('partials/loop', 'new_articles_1');
//Save post IDs into array
$ids[]= $post->ID;
endwhile;
else :
endif;
wp_reset_postdata();?>
<?php
$new_articles_all = new WP_Query('posts_per_page=2');
if ($new_articles_all->have_posts()) :
while ($new_articles_all->have_posts()) : $new_articles_all->the_post();
//Check for duplicates
if (!in_array($post->ID, $ids)) {
get_template_part('partials/loop', 'new_articles_2');
}
endwhile;
else :
endif;
wp_reset_postdata();?>
</div><!-- id="new_articles" -->
我希望第二个循环做的是在找到重复的帖子时再次经历该循环,但是由于没有重复,所以无论找到多少重复的帖子,该循环总是输出两个帖子。
答案 0 :(得分:0)
您只要求2个帖子
$new_articles_all = new WP_Query('posts_per_page=2');
如果这些帖子之一在您的ID列表中,则只剩下一个要显示。为了确保您至少需要索取new_articles + 2的大小。
如果您要确保第二个循环仅显示2个帖子,请使用一个计数器变量,并在到达2时退出while循环。