我怎么能在主页上显示7个帖子,但在后续页面上显示9个帖子?

时间:2016-09-27 作者:Paul Dixon

我的网站主页设置为显示9篇最新帖子(通过管理区域中的设置),然后在底部我有标准分页链接,允许访问者查看更多帖子。

我想有主页(只有主页)显示7个最新的帖子,但在随后的页面-2,3,4等有9个帖子显示。我还想类别和档案显示9个职位太。

到目前为止,我尝试的所有方法要么导致帖子丢失或重复,要么最终在分页中显示一个额外的页面,结果是404。

So far I\'ve tried variations of the answer posted here:

Pagination returns 404 after page 20

And also here (Case #2: Conditional Offset):

Different 'posts_per_page' setting for first, and rest of the paginated pages?

这两种方法似乎都不适用于我想要实现的目标,但我觉得我已经接近解决方案,可能会错过一些显而易见的东西。

下面是我尝试的代码的最新版本(添加到functions.php),这导致显示了太多分页链接(最后一个链接导致404):

function home_paged_offset( $query ) {
$ppp = get_option( \'posts_per_page\' );
$first_page_ppp = 7;
$paged = $query->query_vars[ \'paged\' ];
if( $query->is_home() && $query->is_main_query() ) {
    if( !is_paged() ) {
        $query->set( \'posts_per_page\', $first_page_ppp );
    } else {
        $paged_offset = $first_page_ppp + ( ($paged - 2) * $ppp );
        $query->set( \'offset\', $paged_offset );
    }
}
}
add_action( \'pre_get_posts\', \'home_paged_offset\' );

function home_adjust_paged_offset_pagination( $found_posts, $query ) {
$ppp = get_option( \'posts_per_page\' );
$first_page_ppp = 7;
$paged = $query->query_vars[ \'paged\' ];
if( $query->is_home() && $query->is_main_query() ) {
    if( !is_paged() ) {
        return( $found_posts );
    } else {
        return( $found_posts - ($first_page_ppp - $ppp) );
    }
}
return $found_posts;
}
add_filter( \'found_posts\', \'home_adjust_paged_offset_pagination\', 10, 2 );

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

好吧,这真的很棘手。到目前为止,我通过向WordPress global撒谎来解决这个问题$wp_query. 这里是如何。

在您的主题中functions.php 您可以添加这些函数,在第一页上显示7篇文章,在任何其他页面上显示9篇文章。

好的,到目前为止,该代码仍然有效,但您会注意到第一页上的分页不正确。为什么?这是因为WordPress在第一页上使用每页的帖子数(7),并通过像(1000/7)=总帖子数这样的除法来获得页数。但我们需要的是让分页考虑到,在接下来的页面上,我们将显示每页9篇文章,而不是7篇。使用过滤器,您无法做到这一点,但如果您在之前将此黑客添加到模板中the_posts_pagination() 功能它将按您的预期工作。

The trick is to change the max_num_pages inside $wp_query global variable to our custom value and ignore WP calculation during the pagination links display only for first page.

global $wp_query;

// Needed for first page only
if ( ! $wp_query->is_paged ) {
    $all_posts_except_fp = ( $wp_query->found_posts - 7 ); // Get us the found posts except those on first page
    $wp_query->max_num_pages = ceil( $all_posts_except_fp / 9 ) + 1; // + 1 the first page we have containing 7 posts
}
这是输入函数的代码。php来过滤查询。

add_action(\'pre_get_posts\', \'myprefix_query_offset\', 1 );
function myprefix_query_offset(&$query) {

    if ( ! $query->is_home() ) {
        return;
    }

    $fp = 7;
    $ppp = 9;

    if ( $query->is_paged ) {
        $offset = $fp + ( ($query->query_vars[\'paged\'] - 2) * $ppp );
        $query->set(\'offset\', $offset );
        $query->set(\'posts_per_page\', $ppp );

    } else {
        $query->set(\'posts_per_page\', $fp );
    }

}

add_filter(\'found_posts\', \'myprefix_adjust_offset_pagination\', 1, 2 );
function myprefix_adjust_offset_pagination($found_posts, $query) {

    $fp = 7;
    $ppp = 9;

    if ( $query->is_home() ) {
        if ( $query->is_paged ) {
            return ( $found_posts + ( $ppp - $fp ) );
        }
    }
    return $found_posts;
}

SO网友:KJQLjeRJltuEEDGxxXlbteVyyIFEDM

函数分页($query\\u string){全局$posts\\u per\\u page,$paged;$my\\u query=新WP\\u query($query\\u string。“&posts\\u per\\u page=-1”);$total\\u posts=$my\\u query->post\\u count;if(empty($paged))$paged=1;$prev=$paged-1;$paged+1;$range=5;$showitems=($range*2)+1;$pages=ceil($total\\u posts/$per\\u page);if(1!=$paged页面){echo“”;echo($页面>1&;$显示项目<;$页面)?\'«\':“”;对于($i=1;$i<;=$pages;$i++){如果(1!=$pages&;(!($i>=$paged+$range-0 |;$i<;=$paged-$range-1){回音($paged==$i)“。$i.”\':“。$i.”\';}}echo($paged<;$页&;$showitems<;$页)?\'»\':“”;回音“\\n”;}}

相关推荐

_POST_Pagination()在wpQuery中不起作用

我正在尝试为自定义wp\\U查询创建分页,下面是我的代码:<?php $btpgid=get_queried_object_id(); $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $args = array( \'cat\' => 1, \'posts_per_page\' => 6, &#