在分页查询中获取帖子的非分页索引

时间:2015-09-14 作者:matthijs100

我想根据“产品”帖子类型在其档案中的位置对其进行编号。目前,我试图通过创建一个计数器变量来实现这一点$count 并在存档模板的循环中递增,archive-product.php:

<?php 
  $count=0;

  while ( have_posts() ) : the_post();

    echo("<br />Count=" . $count . " eind count <br />");
    $count++;
    get_template_part( \'content\', \'product\' );

  endwhile; // end of the loop.
?>
但是,由于分页,此解决方案从开始计数0 同样,对于产品的每一页,当每页显示10个项目时,每页显示数字0到9。

我怎样才能不断地为我的产品编号,使每一页都能从最后一页的位置开始(即第一页显示数字1-10,第二页显示数字11-20等)?

1 个回复
SO网友:bosco

将一组帖子划分为多个“页面”的概念称为Pagination, 并由a number of pagination parameters 在a中WordPress posts query. 三个最相关(最常用)的是:

  • posts_per_page: 每页显示的帖子数paged: 当前显示的是哪一页的帖子(请注意,在静态首页和拆分为“页面”的单个帖子上,页码由page 改为参数)
  • offset: 要“跳过”的帖子数,或上一页的帖子数。这将覆盖paged 参数(因此这两个参数在不同的情况下使用)-但通常可以从其他两个参数计算get_query_var(), 因此,您可以这样检索它们:

    // Retrieve posts_per_page query variable defaulting to -1 to indicate all posts on one page
    $posts_per_page = get_query_var( \'posts_per_page\', -1 );
    
    // Retrieve the page number from \'paged\', defaulting to false if not found
    $page_number = get_query_var( \'paged\', false );
    
    // If the page number couldn\'t be retrieved from \'paged\', try \'page\', and assume page number 1 if it can\'t be found there, either.
    if( !$page_number )
      $page_number = get_query_var( \'page\', 1 );
    
    // Retrieve the number of posts on previous pages, defaulting to 0
    $offset = get_query_var( \'offset\', 0 );
    
    了解这些查询参数的值可以使用以下表达式之一在分页查询结果中获取当前帖子的索引:

    {number of previous posts} + {current post index within this page}
    // OR, since {number of previous posts} = {number of posts per page} * {page number}:
    {number of posts per page} * {page number} + {current post index within this page}
    
    唯一缺少的是{current post index within this page}, 在您的问题中,您通过创建和递增$count 变量-但WordPress也提供了另一种在循环中访问此数据的方法:the $current_post property of the WP_Query object, 可通过以下方式访问主查询the $query global variable:

    // Within The Loop, holds the index of the current post item within the query results array (starting from 0 for the first post)
    $post_index = $query->current_post;
    
    因此,将所有内容放在您的循环中,下面应该正确列出分页查询结果中每个帖子的索引,而不管查询是如何设置的(尽管目前没有考虑posts_per_archive_page 查询参数):

    <?php
      // Retrieve the number of posts from previous pages
      $index_offset = get_query_var( \'offset\', false );
    
      // If the number of posts on previous pages could not be retrieved, calculate it
      if( ! $index_offset ) {
        // Retrieve posts_per_page query variable defaulting to -1 to indicate all posts on one page
        $posts_per_page = get_query_var( \'posts_per_page\', -1 );
    
        /* Retrieve the page number, or assume page number 1 if it\'s not set anywhere (done here
           in shorthand using the "tertiary operator") */
        $page_number = get_query_var( \'paged\', false )
          ? get_query_var( \'paged\' )
          : get_query_var( \'page\', 1 );
    
        // If pagination is enabled and we\'re not on the first page, calculate the offset
        if( $posts_per_page > 0 && $page_number > 1 )
          $index_offset = $posts_per_page * $page_number;
        else
          $index_offset = 0; // Otherwise, indicate that there are no posts before this page
      }
    
      // The Loop
      while( have_posts() ) {
        the_post();
    
        /* Set the post index to it\'s position in the query results, PLUS the number of
           posts on previous pages, and add 1 to start counting from 1 instead of 0 */
        $post_index = $query->current_post + $index_offset + 1;
    
        // Now display $post_index before the post\'s title:
      ?>
    
        <div id="post_<?php the_ID(); ?>" <?php post_class(); ?>>
          <h3 class="post-title"><?php echo( $post_index ); ?>. <?php the_title(); ?></h3>
          <?php the_content(); ?>
        </div>
    
      <?php
      } // End The Loop
    ?>
    

相关推荐

Count posts for pagination

我正在为一个网站分页<;上一页(页码)下一页>很简单,已经完成。但是现在我需要添加一个选择器来直接转到页面(例如:转到第7页),要这样做,我需要知道有多少页面,为此我需要计算在查询中找到了多少帖子。问题是这个网站有太多的帖子(>13.000),查询所有帖子都会减慢页面加载速度,这就像。。。10秒后页面才能加载。显然,这是不可接受的。分页解决了这个问题,因为一次只加载50或100篇文章,但我无法将它们全部计算在内。我可以在不加载的情况下统计某个查询中的帖子吗?或者我可以通过其他方式获得页数吗