在第一页有不同数量的帖子

时间:2014-07-25 作者:norixxx

我需要有一个不同的数量,每页上的第一页,在其他页面的帖子。

例如,这就是我需要的

总帖子数:6篇首页:显示3篇帖子下页:每页显示2篇帖子这是我的代码:

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

$fp_limit = 3; // first page limit
$limit = 2; // following page limit
$offset = 0; // default offset

if( $paged == 1 ) {
    $limit = $fp_limit;
} else {
    $offset = $fp_limit + ( ($paged - 2) * $limit );
}

$args = array(
    \'post_type\' => \'my_post_type\',
    \'post_status\' => \'publish\',
    \'offset\' => $offset,
    \'posts_per_page\' => $limit,
    \'caller_ get_ posts\' => -1, // remove sticky post
    \'paged\' => $paged,
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'my_taxo\',
            \'field\' => \'slug\',
            \'terms\' => array(\'slug1\', \'slug2\', \'slug3\')
        )
    )
);
$my_query = null;
$my_query = new WP_Query($args);

// basic loop
if( $my_query->have_posts() ) : 
while ($my_query->have_posts()) : $my_query->the_post();

...

endwhile; endif; // archive loop
if (function_exists(\'wp_pagenavi\')){ wp_pagenavi( array( \'query\' => $my_query ) ); }

wp_reset_query();
在存档的第一页,此代码假定:

总共有6篇文章,每页3篇。因此,我需要2个归档页,我向您提供的分页是:

[1] [2]

但是,归档代码中的任何其他页面都假定:

总共有6篇文章,每页2篇。因此,我需要3个归档页,我向您提供的分页是:

[1] [2] [3]

需要一些帮助来解决这个问题。

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

EDIT - ANSWER REVISITED

我正在研究另一种解决方案,实际上比原来的答案更好。这不涉及任何自定义查询,我认为出于所有目的,可以删除我的原始答案,但保留以供参考

我仍然相信你在主页上,也会这样对待这件事。这是我的新解决方案

STEP 1

从主页中删除自定义查询,并将其替换为默认循环

<?php

        if ( have_posts() ) :
            // Start the Loop.
            while ( have_posts() ) : the_post();

                ///<---YOUR LOOP--->

            endwhile;

                //<---YOUR PAGINATION--->   

            else : 

                //NO POSTS FOUND OR SOMETHING   

            endif; 

    ?>

STEP 2

使用pre_get_posts 更改主查询以将自定义分类添加到主查询中以显示在主页上。

STEP 3

现在,获取posts_per_page 从后端设置选项(我假定为2),并设置offset 我们将使用它。那将是1 因为你需要在第一页上写3篇文章,在其余的页上写2篇

$ppg = get_option(\'posts_per_page\');
$offset = 1;

STEP 4

在第一页上,您需要添加offsetposts_per_page 将加起来3,以获得第一页上的三篇帖子。

$query->set(\'posts_per_page\', $offset + $ppp);

STEP 5

您必须应用offset 到所有后续页面,否则您将在下一页重复该页面的最后一篇文章

$offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
$query->set(\'posts_per_page\',$ppp);
$query->set(\'offset\',$offset); 

STEP 6

最后,需要从found_posts 否则,您在最后一页上的分页将出错,并为您提供404 错误,因为由于帖子计数不正确,最后一篇帖子将丢失

注意:这段代码破坏了搜索页面上的分页。现已修复,请参阅更新的代码

function homepage_offset_pagination( $found_posts, $query ) {
    $offset = 1;

    if( $query->is_home() && $query->is_main_query() ) {
        $found_posts = $found_posts - $offset;
    }
    return $found_posts;
}
add_filter( \'found_posts\', \'homepage_offset_pagination\', 10, 2 );

ALL TOGETHER

这就是您的完整查询应该进入函数的样子。php

function tax_and_offset_homepage( $query ) {
  if ($query->is_home() && $query->is_main_query() && !is_admin()) {
    $query->set( \'post_type\', \'my_post_type\' );
    $query->set( \'post_status\', \'publish\' );
    $query->set( \'ignore_sticky_posts\', \'-1\' );
    $tax_query = array(
        array(
            \'taxonomy\' => \'my_taxo\',
            \'field\' => \'slug\',
            \'terms\' => array(\'slug1\', \'slug2\', \'slug3\')
        )
    );
    $query->set( \'tax_query\', $tax_query );
    $ppp = get_option(\'posts_per_page\');
    $offset = 1;
    if (!$query->is_paged()) {
      $query->set(\'posts_per_page\',$offset + $ppp);
    } else {
      $offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
      $query->set(\'posts_per_page\',$ppp);
      $query->set(\'offset\',$offset);
    }
  }
}
add_action(\'pre_get_posts\',\'tax_and_offset_homepage\');

function homepage_offset_pagination( $found_posts, $query ) {
    $offset = 1;

    if( $query->is_home() && $query->is_main_query() ) {
        $found_posts = $found_posts - $offset;
    }
    return $found_posts;
}
add_filter( \'found_posts\', \'homepage_offset_pagination\', 10, 2 );

SO网友:Kiel Fleming

我知道这是1000年前的事了,但对于任何在使用自定义查询时寻找此解决方案的人来说,另一个解决方案是如何做到这一点。在这个例子中,第一页需要10篇文章,而接下来的每一页需要9篇。

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
if( $paged == 1 ) {
   $limit = 10;
} else {
   $limit = 9;
}
然后在数组中使用:

\'posts_per_page\' => $limit,
现在你可以走了。

结束

相关推荐

Nested WP_Query breaking loop

我正在使用WP_Query 获取没有子页面的所有页面。对于我再次使用的每个页面WP_Query 获取第一个循环中当前页的所有子页。这一切都很好,我得到了预期的结果。但是现在使用第三个WP_Query 在其中一个子页面上,第二级循环中断。我已经试过了wp_reset_query() 和wp_reset_postdata() 但他们没有做到这一点。我还试图挽救global $wp_query 和global $post 并在循环后重置它们,但这也没有帮助。如何在WP中实现嵌套查询?Edit 根据要求(以及它的