EDIT - ANSWER REVISITED
我正在研究另一种解决方案,实际上比原来的答案更好。这不涉及任何自定义查询,我认为出于所有目的,可以删除我的原始答案,但保留以供参考
我仍然相信你在主页上,也会这样对待这件事。这是我的新解决方案
STEP 1
从主页中删除自定义查询,并将其替换为默认循环
<?php
if ( have_posts() ) :
// Start the Loop.
while ( have_posts() ) : the_post();
///<---YOUR LOOP--->
endwhile;
//<---YOUR PAGINATION--->
else :
//NO POSTS FOUND OR SOMETHING
endif;
?>
STEP 2
使用
pre_get_posts
更改主查询以将自定义分类添加到主查询中以显示在主页上。
STEP 3
现在,获取
posts_per_page
从后端设置选项(我假定为2),并设置
offset
我们将使用它。那将是
1
因为你需要在第一页上写3篇文章,在其余的页上写2篇
$ppg = get_option(\'posts_per_page\');
$offset = 1;
STEP 4
在第一页上,您需要添加
offset
到
posts_per_page
将加起来3,以获得第一页上的三篇帖子。
$query->set(\'posts_per_page\', $offset + $ppp);
STEP 5
您必须应用
offset
到所有后续页面,否则您将在下一页重复该页面的最后一篇文章
$offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
$query->set(\'posts_per_page\',$ppp);
$query->set(\'offset\',$offset);
STEP 6
最后,需要从
found_posts
否则,您在最后一页上的分页将出错,并为您提供
404
错误,因为由于帖子计数不正确,最后一篇帖子将丢失
注意:这段代码破坏了搜索页面上的分页。现已修复,请参阅更新的代码
function homepage_offset_pagination( $found_posts, $query ) {
$offset = 1;
if( $query->is_home() && $query->is_main_query() ) {
$found_posts = $found_posts - $offset;
}
return $found_posts;
}
add_filter( \'found_posts\', \'homepage_offset_pagination\', 10, 2 );
ALL TOGETHER
这就是您的完整查询应该进入函数的样子。php
function tax_and_offset_homepage( $query ) {
if ($query->is_home() && $query->is_main_query() && !is_admin()) {
$query->set( \'post_type\', \'my_post_type\' );
$query->set( \'post_status\', \'publish\' );
$query->set( \'ignore_sticky_posts\', \'-1\' );
$tax_query = array(
array(
\'taxonomy\' => \'my_taxo\',
\'field\' => \'slug\',
\'terms\' => array(\'slug1\', \'slug2\', \'slug3\')
)
);
$query->set( \'tax_query\', $tax_query );
$ppp = get_option(\'posts_per_page\');
$offset = 1;
if (!$query->is_paged()) {
$query->set(\'posts_per_page\',$offset + $ppp);
} else {
$offset = $offset + ( ($query->query_vars[\'paged\']-1) * $ppp );
$query->set(\'posts_per_page\',$ppp);
$query->set(\'offset\',$offset);
}
}
}
add_action(\'pre_get_posts\',\'tax_and_offset_homepage\');
function homepage_offset_pagination( $found_posts, $query ) {
$offset = 1;
if( $query->is_home() && $query->is_main_query() ) {
$found_posts = $found_posts - $offset;
}
return $found_posts;
}
add_filter( \'found_posts\', \'homepage_offset_pagination\', 10, 2 );