我想使用posts\\u per\\u页面限制进行自定义查询循环。
<?php
$news = get_category_by_slug(\'news\');
$sidebar_related = new WP_Query([
\'category__not_in\' => [$news->term_id],
\'post__not_in\' => [$post->ID],
\'posts_per_page\' => 4,
\'post_status\' => \'publish\'
]);
if($sidebar_related->have_posts()) :
while($sidebar_related->have_posts()) :
$sidebar_related->the_post();
the_title();
endwhile;
wp_reset_postdata();
endif;
这段代码返回10条(或其他值)帖子,而不是4条。
$sidebar_related->request
显示
“从wp\\u posts中选择SQL\\u CALC\\u FOUND\\u ROWS wp\\u posts.ID,其中1=1,wp\\u posts.ID不在(15190)和(wp\\u posts.ID不在(从wp\\u term\\u relationships中选择object\\u ID,其中term\\u taxonomy\\u ID在(620))和wp\\u posts.posts.type=\'post\'和((wp\\u posts.post\\u status=\'publish\'))GROUP BY wp\\u posts.ID ORDER BY wp\\u posts.posts.post\\u date DESC LIMIT 0,4”
如你所见,有限制4。但是$sidebar_related->posts
显示包含11个元素的数组。
我已尝试删除所有插件:nothing happens 我试图在空博客上安装我的主题:works correctly 我已尝试删除所有缓存(对象缓存、wp\\u查询缓存):nothing happens 我试着改变category__not_in
arg到category__in
: works correctly添加wp_reset_postdata();
循环之前:nothing happens 所以我不明白为什么会这样。任何帮助都将不胜感激
最合适的回答,由SO网友:Anton Lukin 整理而成
好了,我终于找到了原因。
我们必须忽视sticky posts 在WP\\U查询中,使用以下方式:
$sidebar_related = new WP_Query([
\'category__not_in\' => [$news->term_id],
\'post__not_in\' => [$post->ID],
\'posts_per_page\' => 4,
\'post_status\' => \'publish\',
\'ignore_sticky_posts\' => \'1\'
]);
我希望它能帮助别人。