我正在处理一个非常复杂的查询,它在第一页和分页页面上有不同的帖子计数,以实现我使用的是偏移量,这似乎会弄乱\\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分页将在编号的分页链接中显示至少一个额外的空白页。但是,如果我转到第二页,那么编号的分页将显示正确的最大页数。
非常感谢您的帮助
最合适的回答,由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 );