我正在尝试修改循环中每页的posts\\u数量。这样做:
function posts_per_page($query) {
$query->query_vars[\'posts_per_page\'] = 3;
}
add_filter(\'pre_get_posts\', \'posts_per_page\', 11);
我的问题是,当我这样做时,粘性帖子会在循环中出现两次:第一次出现在循环的开头,第二次出现在其原始位置。因此,在这种情况下,第一个页面有4个帖子(3个无粘性循环+粘性帖子),粘性帖子稍后将与其他2个帖子一起出现在其“页面”中。
EDIT: SOLUTION
在做了大量研究之后,我意识到粘性帖子总是出现在第一页。如果原始的粘性帖子已经出现在第一页中,则只会显示粘性帖子(此帖子只会显示一个)。我需要确切地知道我的查询将有多少帖子,但是$wp\\u query->found\\u posts不包括粘性帖子。如果我做了$wp\\u query->found\\u posts+get\\u选项(\'sticky\\u posts\')就不正确了,因为它不考虑我之前说过的“第一页的贴子”,也不考虑未发布的贴子。
使用$wp\\u query->posts,我可以获得第一页中的真实帖子数,因此:
$sticky = count($wp_query->posts) - get_option( \'posts_per_page\' );
if ($sticky<0) {$sticky=0;}//In case there is only one page of results
现在$sticky将拥有真实数量的sticky帖子。
SO网友:Meyer Auslander - Tst
考虑以下情况:
将粘帖放在顶部不要在以后的页面中重复粘性帖子,每页都要限制特定数量的帖子(即使是第一页)在pre_get_posts
钩子,因为没有简单的方法来设置第一页的帖子数量。WordPress自然会发回所有粘性帖子+第一页上的帖子。尝试计算posts_per_page
基于sticky posts
以下并发症。
有许多情况需要考虑。有时sticky posts
小于posts_per_page
, 有时更多,有时相等。每个案件都需要分开处理没有办法处理sticky posts
超过posts_per_page
如中所述an answer to a similar question因此,解决方案是修改代码执行the loop
.
global $wp_query, $post;
// Setup manual paging scheme.
$page_requested = $wp_query->query_vars[\'paged\'] ? $wp_query->query_vars[\'paged\'] : 1;
$number_per_page = $wp_query->query_vars[\'posts_per_page\'];
$first_post_to_display = ( $page_requested - 1 ) * $number_per_page + 1;
$last_post_to_display = $first_post_to_display + $number_per_page - 1;
$current_post = 1;
// Re query posts without paging so it won\'t duplicate the sticky posts.
$query = new WP_Query( array( \'nopaging\' => true ) );
while ( $query->have_posts() ) :
$query->the_post();
$should_display_this_post = $current_post >= $first_post_to_display && $current_post <= $last_post_to_display;
if ( $should_display_this_post ) {
?>
<Template code to output post content here>
<?php }
++$current_post;
endwhile;
?>
说明:
在不分页的情况下重新查询所有帖子,以删除重复的帖子(同时保留sticky posts
.根据请求的页码和所需的posts_per_page
.