删除重复帖子的循环没有发布正确数量的帖子

时间:2019-01-26 04:00:36

标签: wordpress loops

我有两个循环,第一个是发布四个最近的帖子,而排除一个类别。第二个应该发布除第一个循环中的帖子以外的所有最新帖子。

最终发生的事情是,第一个循环发布了四个最新的帖子(这是我在寻找的,所以,是的!),但是第二个循环将在整个循环中运行两次,并且如果一个帖子在在第一个循环中,它将发布的帖子数量少于应有的数量。

例如,当第二个循环运行时,它从类别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" -->

我希望第二个循环做的是在找到重复的帖子时再次经历该循环,但是由于没有重复,所以无论找到多少重复的帖子,该循环总是输出两个帖子。

1 个答案:

答案 0 :(得分:0)

您只要求2个帖子

$new_articles_all = new WP_Query('posts_per_page=2');

如果这些帖子之一在您的ID列表中,则只剩下一个要显示。为了确保您至少需要索取new_articles + 2的大小。

如果您要确保第二个循环仅显示2个帖子,请使用一个计数器变量,并在到达2时退出while循环。