我需要提取过去6个月到今天发布的wordpress内的所有帖子。
我使用WP_Query
来执行此操作,
$today = new \DateTime();
$prev = new \DateTime();
$interval = new \DateInterval('P6M');
$prev->sub( $interval );
$args = [
'post_type' => 'post',
'date_query' => [
[
'before' => $today->format('Y-m-d H:i:s'),
'after' => $prev->format('Y-m-d H:i:s'),
'inclusive' => true
]
]
];
echo '[POST] Today: ' . $today->format('Y-m-d') . "\n";
echo "[POST] Count:" . $wpQuery->post_count . "\n";
echo '[POST] Start date: ' . $prev->format('Y-m-d') . "\n";
输出
Today: 2017-03-09
Count: 7
Start date: 2016-09-09
如果我在wordpress数据库中进行选择,则在相同的日期内我得到2086行。
SELECT COUNT(ID)
-> FROM wp_posts
-> WHERE DATE(post_date) >= '2016-09-09' AND DATE(post_date) < '2017-03-09'
-> AND post_type = 'post';
SQL输出
+-----------+
| count(ID) |
+-----------+
| 2086 |
+-----------+
WP_Query我做错了什么?为什么我得到两个不同的结果?
感谢。
答案 0 :(得分:1)
在您的SQL查询中,您将发布日期设置为小于2017-03-09 DATE(post_date) < '2017-03-09'
,但在WP_Query中'inclusive' => true
小于或等于2017-03-09 {{1} }。
您可以打印WP_Query生成的sql查询,如下所示:
DATE(post_date) <= '2017-03-09'
试一试:
echo $wpQuery->request;
答案 1 :(得分:0)
SELECT COUNT(ID)
FROM wp_posts
WHERE DATE(post_date) >= '2016-09-09' AND DATE(post_date) < '2017-09-09'
AND post_type = 'post';