这是我最近对另一个问题的回答,和你的一样。因为答案从未被投票或接受过,我无法将这个问题标记为重复,所以我删除了另一篇帖子中的答案,并将其重新发布在这里。
请注意,有些观点不是针对这个问题的,可以忽略,而且,您只需要对这些值进行一些更改,因为我在原始帖子中没有更改任何内容。因此,不要对答案中的某些信息感到震惊;-)
重新调整用途的答案
Here 是我对同一情景的回答的一个微小变化。这里的不同之处在于你想要的更少
posts_per_page
在第一页
STEP 1
去除
query_posts
. 永远不要使用
query_posts
Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query_posts()是一种过于简单且有问题的方法,它通过将页面的主查询替换为查询的新实例来修改页面的主查询。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。
将其替换为默认循环
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php if ( \'regularproducts\' == get_post_type() ) : ?>
//CONTENT HERE
<?php endif; ?>
<?php if ( \'wpsc-product\' == get_post_type() ) : ?>
//CONTENT HERE
<?php endif; ?>
<?php endwhile; endif; ?>
STEP 2
使用
pre_get_posts
要更改主查询,请将自定义post\\u类型添加到主查询中,以显示在主页上。
STEP 3
现在,获取
posts_per_page
从后端设置选项(应设置为300),并设置
offset
我们将使用它。那将是
200
因为你需要在第一页上发表100篇文章,其余的300篇。
如果您不想更改posts_per_page
选项,然后只需设置变量$ppg
到300
$ppg = get_option( \'posts_per_page\' );
//$ppg = 300;
$offset = 200;
STEP 4
在第一页,你需要减去
offset
到
posts_per_page
$query->set( \'posts_per_page\', $ppp - $offset );
STEP 5
您必须应用
offset
到所有后续页面,否则您将在下一页重复该页面的最后一篇文章
$offset = ( ( $query->query_vars[\'paged\']-1 ) * $ppp ) - $offset;
$query->set( \'posts_per_page\', $ppp );
$query->set( \'offset\', $offset );
STEP 6
最后,需要将偏移量添加到
found_posts
否则,分页将不会显示最后一页
注意:这段代码破坏了搜索页面上的分页。现已修复,请参阅更新的代码
function homepage_offset_pagination( $found_posts, $query ) {
$offset = 200;
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 ( !is_admin() && $query->is_home() && $query->is_main_query() ) {
$query->set( \'post_type\', array( \'regularproducts\', \'wpsc-product\' ) );
$ppp = get_option( \'posts_per_page\' );
//$ppp = 300;
$offset = 200;
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_action(\'pre_get_posts\',\'tax_and_offset_homepage\');
function homepage_offset_pagination( $found_posts, $query ) {
$offset = 200;
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 );