web-dev-qa-db-ja.com

パラメータがtrueであるにもかかわらず日付クエリが包括的ではない

10月1日から10月10日までの間にいくつかの投稿を取得するための小さなテストクエリを設定しました。今日(10月10日)に投稿を発行し、日付クエリパラメータincludename__をtrueに設定すると、この投稿は表示されます。クエリ結果に。しかし、そうではありません。

投稿の公開日を10月1日に変更すると、結果に表示されます。 inclusivename__をfalseに変更しても、まだ表示されます。基本的に、inclusivename__はdoanythingには現れません。

inclusivename__が答えではない場合、10月1日から10月10日までのすべての投稿を確実に受け取るための別の方法はありますか?10月1日と10月10日

$args = array( 
    'date_query' => array(
                array(
                    'after' => '2014-10-01',  
                    'before' => '2014-10-10',
                    'inclusive' => true  
                ),

            )
    );

$posts = get_posts($args);
if( $posts ) { 
    foreach ($posts as $p) {
        echo $p->post_title . ' on ' . $post->post_date . '<Br>';
    } 
} else {
    echo 'no posts';
}

を編集して、日付クエリのSQLとwhere句をダンプしたことを追加しました。

"AND((post_date> = '2014-10-01 00:00:00' AND post_date <= '2014-10-10 00:00:00')))"

それで、それは実際には丸一日中包括的ではありません。値をフィルタリングする

"AND((post_date> = '2014-10-01 00:00:00' AND post_date <= '2014-10-10 23:59:59'))"

実際には10月10日の日中に行われた投稿が含まれています。

1
helgatheviking

例えばyyyy-mm-ddのように'2014-10-10'の文字列だけを操作したい場合は、次のようにします。

'before' => '2014-10-10 + 1 day - 1 second',

'before' => '2014-10-10 + 86399 seconds',

'before' => 'tomorrow 2014-10-10 - 1 second',

'before' => '2014-10-10 tomorrow - 1 second',

または

'23:59:59'をあなたのyyyy-mm-dd文字列に追加するだけです。

取得するため

'before' => '2014-10-10 23:59:59'
2
birgire