我编写了一个带有日期范围的WP\\u查询。
$args = array(
\'date_query\' => array(
array(
\'column\' => \'post_date_gmt\',
\'after\' => array(\'year\' => $after[0], \'month\' => $after[1], \'day\' => $after[2])
),
array (
\'column\' => \'post_date_gmt\',
\'before\' => array(\'year\' => $before[0], \'month\' => $before[1], \'day\' => $before[2])
)
),
\'posts_per_page\' => -1,
\'inclusive\' => false,
);
$posts = new WP_Query( $args );
当我输出sql并在phpmyadmin中运行它时,它可以很好地工作。
SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( wp_posts.post_date_gmt > \'2015-01-11 23:59:59\'
AND wp_posts.post_date_gmt < \'2015-01-17 00:00:00\' ) AND wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\')
ORDER BY wp_posts.post_date DESC
然而,循环打印出更多的帖子
if ( $posts->have_posts() ) :
while ( $posts->have_posts() ) : $posts->the_post();
我尝试过使用重置循环功能,但没有成功。我做错了什么。这是在一个试图模拟存档的页面模板中。
谢谢
克里斯
最合适的回答,由SO网友:Anton Timmermans 整理而成
尝试使用运行查询
"suppress_filters" => true
WP_Query
允许在查询运行后添加帖子。found\\u posts是实际查询的帖子数量,post\\u count在运行筛选器后更新。
如果这修复了它,请搜索您的代码(任何活动代码,也请检查网络激活插件)以查找the_posts
或posts_results
过滤并检查是否是原因。
另一个原因可能是我们在评论中发现的粘性帖子,可以使用
"ignore_sticky_posts" => true
默认情况下,WP\\u Query会将粘性帖子添加到归档文件的第一页,其中
is_home()
是真的。