我想在子页面上显示更多帖子
我在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
}
.....
这可能吗?
答案 0 :(得分:5)
这是我之前在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;