如何调整FIND_POST以使其考虑到偏移量和分页

时间:2013-07-05 作者:Artha

到目前为止,这是我索引中的代码。php文件:

<?php 

        // Custom code to offset posts and setup pagination
        $page = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;

        $ppp = get_option( \'posts_per_page\' );      

        if ( $page == 1 )
            $offset = 6;
        else
            $offset = 6 + ( $page - 1 ) * $ppp;

        $args = array(
          \'posts_per_page\' => $ppp,
          \'offset\'     =>  $offset,
        );
        $offset_query = new WP_Query ( $args );

?>
在这一点上,一切都很好,除了网站上有一个没有帖子的额外页面。显然,这是因为found\\u posts不考虑偏移量,所以found\\u posts认为有更多的帖子,并添加了额外的页面。

那么,我如何从found\\u posts值中扣除偏移量,以便不出现额外的页面。或者,我如何摆脱显示的额外页面。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

你这样做很难,但效率较低。页面上已经有一个循环。你应该能够单独使用这个和那个。

if (have_posts()) {
  while (have_posts()) {
    the_post();
    if (6 < $wp_query->current_post) {
      // formatting for your first six posts
    } else {
      // formatting for the other posts
    }
  }
}
就是这样。无需新查询。分页将不需要额外的工作。

注意事项:

“粘性”帖子将包含在您的前六篇帖子中posts_per_page减去6个其他员额。其他页面只有posts_per_page 职位如果你想在第一页(首页)多加六个,你需要在你的主题functions.php:

function special_offset_pregp_wpse_105496($qry) {
  if ($qry->is_main_query()) {
    $ppg = get_option(\'posts_per_page\');
    $offset = 2;
    if (!$qry->is_paged()) {
      $qry->set(\'posts_per_page\',$offset);
    } else {
      $offset = $offset + ( ($qry->query_vars[\'paged\']-1) * $ppg );
      $qry->set(\'posts_per_page\',$ppg);
      $qry->set(\'offset\',$offset);
      add_filter(\'found_posts\', \'special_offset_pregp_fp_wpse_105496\', 1, 2 );
    }
  }
}
add_action(\'pre_get_posts\',\'special_offset_pregp_wpse_105496\');

function special_offset_pregp_fp_wpse_105496($found_posts) {
  return $found_posts - 2;
}

SO网友:Shahinul Islam

我认为你在寻找这个解决方案

http://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination

偏移量的问题很有用,因为它允许开发人员在开始输出之前跳过一定数量的WordPress帖子。

不幸的是,许多开发人员很难发现,在自定义WordPress查询中设置偏移量值会产生破坏分页的严重副作用。

然而,这有一个很好的理由。。。偏移量参数实际上是WordPress用来处理分页本身的值。如果开发人员设置手动偏移量值,分页将不起作用,因为该值将覆盖WordPress对给定页面偏移量的自动调整。

解决方案

为了在WordPress查询中使用偏移量而不丢失WordPress的分页功能,您需要手动处理一些基本分页计算。这可以通过以下两个挂钩实现:

pre\\u get\\u posts-此挂钩允许在运行查询之前调整查询。在这里,我们需要确保偏移量只应用于第一页

found\\u posts-允许更正WordPress的查询结果计数。这使我们能够确保WordPress考虑到除第一页以外的其他页面的偏移量。

结束

相关推荐

WP_Query breaks pagination

我已经研究这个问题一周了。我搜索了无数没有回答这个问题的帖子。我的wp\\u查询似乎破坏了分页。我已经在这里浏览了很多关于wp\\U查询和分页的帖子,但仍然毫无乐趣。据我所知,它的设置是正确的。我有一个实例,它将在一个页面中显示所有帖子,而在另一个页面中,它会重复每个页面上的内容。请参阅下面的代码,以获取带注释的精简版本。有人知道问题出在哪里吗?<?php /* Let\'s asume that this is the search query in the