好吧,这真的很棘手。到目前为止,我通过向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;
}