为什么wp_query循环仍然会考虑隐藏的类别和' post__not_in'在分页?

时间:2015-09-28 14:57:23

标签: php wordpress loops pagination wp-query

我在同一页面上有三个循环。

  1. 第一个循环显示最近的类别"突出显示"。
  2. 第二个循环按时间顺序显示同一类别的其他帖子。
  3. 第三个循环显示所有帖子,但其他循环中的帖子除外。
  4. 一切正常,但在分页(pagenavi)中,max_num_pages会考虑所有帖子,忽略了像“post__not_in”这样的标准。或者' cat'。

    如果我使用这个循环,pagenavi的最后一页仍然是空白的(计算隐藏的帖子,但不要显示它们):

    if ($loop3->have_posts()) : while ($loop3->have_posts()) : $loop3->the_post();
    

    如果我使用这个循环(循环3),pagenavi的最后一页显示"隐藏"帖子:

    if (have_posts()) : while (have_posts()) : the_post();
    

    如何强制wp_query循环排除max_num_pages计数的隐藏帖子?

    //loop 1
    
      <?php
      $loop1 = new WP_query(array(
      'category_name' => 'highlight',
      'posts_per_page' => 1,
      ));
      if($loop1->have_posts()) : $firstPosts = array(); while($loop1->have_posts()) : $loop1->the_post();
      $firstPosts[] = $post->ID;
      ?>
    
      <?php endwhile; ?>
    
      <?php wp_reset_postdata(); ?>
    
      <?php endif; ?>
    
    //loop 2
    
      <?php
      $loop2 = new WP_query(array(
      'post__not_in' => $firstPosts,
      'category_name' => 'highlight',
      'posts_per_page' => 2,
      ));
      if($loop2->have_posts()) : while($loop2->have_posts()) : $loop2->the_post();
      $firstPosts[] = $post->ID;
      ?>
    
      <?php endwhile; ?>
    
      <?php wp_reset_postdata(); ?>
    
      <?php endif; ?>
    
    //loop 3
    
      <?php
      $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
      $args = array(
      'post_type' => 'post',
      'paged' => $paged,
      'post__not_in' => $firstPosts,
      'cat' => -23,
      );
      $loop3 = new WP_Query( $args );
      if ($loop3->have_posts()) : while ($loop3->have_posts()) : $loop3->the_post();
      ?>
    
      <?php endwhile; ?>
    
      <?php wp_reset_postdata(); ?>
    
      <?php else:  ?>
    
      <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
    
      <?php endif; ?>
    
    //other stuff
    
    //pagenavi
    
      <?php wp_pagenavi("", "", array(
        'query' => $loop3,
        'first_text' => 'lorem ipsum',
        'last_text' => 'lorem ipsum',
      )); ?>
    

1 个答案:

答案 0 :(得分:2)

如果你正在使用WP-PageNavi,有一种特殊的方法可以将它用于自定义查询。例如:

$my_query = new WP_Query(
    array(
        'tag' => 'foo',
        'paged' => get_query_var('paged')
    )
);

while ( $my_query->have_posts() ) : $my_query->the_post();
    the_title();
    // more stuff here
endwhile;

wp_pagenavi( array( 'query' => $my_query ) );

wp_reset_postdata();    // avoid errors further down the page

因此,请确保将自定义查询对象传递到wp_pagenavi()函数调用。

〜编辑〜 以下是文档的链接:http://scribu.net/wordpress/wp-pagenavi/wpn-2-74.html

〜编辑2~ 尝试为您的特定应用程序定制的代码:

$args = array(
    'post_type' => 'post',
    'paged' => $paged,
    'post__not_in' => $firstPosts,
    'cat' => -23,
);
$loop3 = new WP_Query( $args );

...

wp_pagenavi( array( 'query' => $loop3 ) );
wp_reset_postdata();