Wordpress,在子页面上显示更多帖子

时间:2016-01-06 02:50:22

标签: php wordpress pagination

我想在子页面上显示更多帖子

我在functions.php中的代码

function number_of_posts($query)
{
    if($query->is_main_query())
    {
       $paged = $query->get( 'paged' );
       if ( ! $paged || $paged < 2 ) 
       {

       } 
       else 
       {
           $query->set('posts_per_page', 24);
       }
    }
    return $query;
}
add_filter('pre_get_posts', 'number_of_posts');

问题: 在第一页,我得到一个错误的分页。它显示了指向子页面4的链接,但子页面4没有退出。

我想我必须添加这样的东西

....
if ( ! $paged || $paged < 2 ) 
{

// show only 10 posts but calculate the pagination with 18 posts

} 
.....

这可能吗?

2 个答案:

答案 0 :(得分:5)

这是我之前在WPSE上完成的帖子的修改版本

FROM WPSE

第1步

我们需要从后端设置posts_per_page选项(应该设置为10)并设置我们将要使用的offset。这将是14,因为第一页需要24个帖子,其余24个帖子。

如果您不想更改posts_per_page选项,则只需将变量$ppg设置为10

即可
$ppg = get_option( 'posts_per_page' );
//$ppg = 10;
$offset = 14;

第2步

在第一页上,您需要将offset减去posts_per_page

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

第3步

您必须将offset应用于所有后续页面,否则您将在下一页重复显示该页面的最后一个帖子

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

第4步

最后,您需要将偏移量添加到found_posts,否则您的分页将不会显示最后一页

add_filter( 'found_posts', function ( $found_posts, $query ) 
{
    $offset = 14;

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

ALL TOGETHER

这就是你的完整查询应该如何进入functions.php

add_action('pre_get_posts', function ( $query ) 
{
    if ( !is_admin() && $query->is_main_query() ) {
        $ppp    = get_option( 'posts_per_page' );
        //$ppp  = 10;
        $offset = 14;

        if ( !$query->is_paged() ) {
            $query->set( 'posts_per_page', $ppp - $offset );
        } else {
            $offset = ( ( $query->query_vars['paged']-1 ) * $ppp ) - $offset;
            $query->set( 'posts_per_page', $ppp );
            $query->set( 'offset', $offset );
        }
    }
});

add_filter( 'found_posts', function ( $found_posts, $query ) 
{
    $offset = 14;

    if( $query->is_main_query() ) {
        $found_posts = $found_posts + $offset;
    }
    return $found_posts;
}, 10, 2 );

答案 1 :(得分:-2)

<?php 
function number_of_posts($query)
{
    if($query->is_main_query())
    {
       $paged = $query->get( 'paged' );

       //if page is less than 2 get 10 post on that page (that is on page 1)
       if ( ! $paged || $paged < 2 ) 
       {
            $query->set('posts_per_page', 10);
       } 
       else 
       {
           $query->set('posts_per_page', 24);
       }
    }
    return $query;
}
add_filter('pre_get_posts', 'number_of_posts');?>

并在主查询中指定了Wp_Query的所有参数。请添加$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;