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


Why wp_query loop still considers hidden categories and 'post__not_in' in pagination?

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

  1. 第一个循环显示类别"highlight"的最新发布。
  2. 第二个循环按时间顺序显示同一类别的其他帖子。
  3. 第三个循环显示所有的帖子,除了其他循环中的帖子。

一切正常,但在分页(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',
  )); ?>

如果您正在使用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();