将_POSTS_PAGING与偏移量一起使用会添加额外的空页

时间:2019-01-06 作者:sebfck

我正在处理一个非常复杂的查询,它在第一页和分页页面上有不同的帖子计数,以实现我使用的是偏移量,这似乎会弄乱\\u posts\\u分页。

代码如下:

index.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
 //post content here...
<?php endwhile; endif; ?>

<?php
    the_posts_pagination( array(
        \'mid_size\'  => 2,
        \'prev_text\' => __( \'Prev\', \'textdomain\' ),
        \'next_text\' => __( \'Next\', \'textdomain\' ),
    ));
?>

functions.php

function my_offset( $query ) {
    $ppp = get_option( \'posts_per_page\' );
    $first_page_ppp = 3;
    $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\', \'my_offset\' );

function my_offset_pagination( $found_posts, $query ) {
    $ppp = get_option( \'posts_per_page\' );
    $first_page_ppp = 3;

    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\', \'my_offset_pagination\', 10, 2 );
在阅读设置中,每页的帖子设置为5,但无论设置为什么,问题都存在。

现在使用此代码,\\u posts\\u分页将在编号的分页链接中显示至少一个额外的空白页。但是,如果我转到第二页,那么编号的分页将显示正确的最大页数。

非常感谢您的帮助

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

多亏了米洛,我找到了一些让它如期工作的东西:

对索引所做的更改。php:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
 //post content here...
<?php endwhile; endif; ?>

<?php
global $wp_query;

$big = 999999999; // need an unlikely integer
$amount = $wp_query->found_posts;
$totalpages = $amount - (3 - 5);

echo paginate_links( array(
    \'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
    \'format\' => \'?paged=%#%\',
    \'current\' => max( 1, get_query_var(\'paged\') ),
    \'total\' => $totalpages / 5
) );
?>
因此,我切换到paginate\\u links,它允许我设置总页数,我可以使用find\\u posts和3(第一页上的帖子数量)以及5(分页页面上的帖子数量)来计算。

EDIT:

找到了另一个更好的解决方案:

function my_offset_pagination( $found_posts, $query ) {
    $ppp = get_option( \'posts_per_page\' );
    $first_page_ppp = 3;

    if( $query->is_home() && $query->is_main_query() ) {
        if( !is_paged() ) {

            return( $first_page_ppp + ( $found_posts - $first_page_ppp ) * $first_page_ppp / $ppp );

        } else {

            return( $found_posts - ($first_page_ppp - $ppp) );

        }
    }
    return $found_posts;
}
add_filter( \'found_posts\', \'my_offset_pagination\', 10, 2 );

相关推荐

change pagination url

目前,我的分页页面URL为:http://www.example.com/category_name/page/2但我需要将此URL结构更改为:http://www.example.com/category_name/?page=2等有什么解决方案吗?