在日期之间获取帖子

时间:2017-03-09 10:32:40

标签: php wordpress

我需要提取过去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我做错了什么?为什么我得到两个不同的结果?

感谢。

2 个答案:

答案 0 :(得分:1)

  1. 在您的SQL查询中,您将发布日期设置为小于2017-03-09 DATE(post_date) < '2017-03-09',但在WP_Query中'inclusive' => true小于或等于2017-03-09 {{1} }。

  2. 您可以打印WP_Query生成的sql查询,如下所示:

    DATE(post_date) <= '2017-03-09'
  3. 试一试:

    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';