[英]Change number of posts on consecutive category pages (Wordpress)
我正在尝试更改在连续页面上更改类别页面上显示的帖子数量(第2,3页等)。 因此,第一页显示7个帖子,但该类别的第2,3和4页等每页仅显示6个帖子(即,当您单击“下一页”列出较旧的帖子时)。
我知道更改不同类别/存档页面的帖子数量相对简单 - 但这是不同的,因为我希望分页页面具有不同数量的帖子。
有任何想法吗?
这是我最近在WPSE上做的回答。 我已经做了一些改变以满足您的需求。 您可以在这里查看该帖子
第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;
?>
第2步
使用pre_get_posts
更改主查询以更改类别页面上的posts_per_page
参数
第3步
现在,从后端(我假设为6)设置posts_per_page
选项,并设置我们将要使用的offset
。 那将是1
因为你需要在第一页上有7个帖子,在其余时间需要6个帖子
$ppg = get_option('posts_per_page');
$offset = 1;
第四步
在第一页上,您需要向posts_per_page
添加offset
, posts_per_page
可添加7个,以便在第一页上获得您的七个帖子。
$query->set('posts_per_page', $offset + $ppp);
第5步
您必须将offset
应用于所有后续页面,否则您将在下一页重复页面的最后一个帖子
$offset = $offset + ( ($query->query_vars['paged']-1) * $ppp );
$query->set('posts_per_page',$ppp);
$query->set('offset',$offset);
第6步
最后,您需要从found_posts
减去您的偏移量,否则您在最后一页上的分页将是错误的,并且由于错误的帖子计数而导致最后一个帖子丢失,因此会出现404
错误
function category_offset_pagination( $found_posts, $query ) {
$offset = 1;
if( !is_admin() && $query->is_category() && $query->is_main_query() ) {
$found_posts = $found_posts - $offset;
}
return $found_posts;
}
add_filter( 'found_posts', 'category_offset_pagination', 10, 2 );
全部一起
这就是你的完整查询应该如何进入functions.php
function ppp_and_offset_category_page( $query ) {
if ($query->is_category() && $query->is_main_query() && !is_admin()) {
$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','ppp_and_offset_category_page');
function category_offset_pagination( $found_posts, $query ) {
$offset = 1;
if( !is_admin() && $query->is_category() && $query->is_main_query() ) {
$found_posts = $found_posts - $offset;
}
return $found_posts;
}
add_filter( 'found_posts', 'category_offset_pagination', 10, 2 );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.