我想在我的子页面上显示更多帖子
我在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 } .....
这可能吗?
这是我之前在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
toposts_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 );
全部一起
这就是你的完整查询应该如何进入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 );