Проблемы с date_query: не все записи возвращаются в указанном диапазоне дат

4 мар. 2015 г., 20:45:09
Просмотры: 18.1K
Голосов: 6

Я получаю очень странные результаты при использовании параметра date_query в get_posts. У меня есть запись, для которой:

date('Y-m-d H:i', get_post_time('U', false, $postid))

возвращает:

2014-04-03 10:42

Эта запись нормально возвращается через get_posts с такими аргументами:

$args = array(
    'post_type' => 'post',
    'cat' => 41,
    'fields' => 'ids'
);

Но не возвращается с такими аргументами:

$args = array(
    'post_type' => 'post',
    'date_query' => array(
        'after' => '1980-01-01',
        'before' => '2100-01-01',
    ),
    'cat' => 41,
    'fields' => 'ids',
);

Другие записи возвращаются нормально. В чем может быть проблема? Может date_query проверяет что-то другое, чем get_post_time?

1
Комментарии

Странно. Вы получаете правильную запись, если запрашиваете ТОЛЬКО по date_query? Пробовали ли использовать wp_query вместо get_posts (не должно быть разницы, но стоит проверить)?

vancoder vancoder
5 мар. 2015 г. 03:18:28
Все ответы на вопрос 1
0

Ваш синтаксис для date_query некорректен. Должен использоваться массив массивов, а не просто массив.

Также я подозреваю, что ваша проблема связана с PHP, а не с WordPress.

Ваша дата before недействительна. PHP поддерживает только даты между 13 декабря 1901 года и 19 января 2038 года, поэтому ваши даты должны находиться в этом диапазоне. Для справки см. date

Также вам следует включить параметр 'inclusive' и установить его в true для точных совпадений.

Ваш запрос должен выглядеть примерно так:

$args = array(
'post_type' => 'post',
'date_query' => array(
    array(
        'after' => '1980-01-01',
        'before' => '2038-01-01',
        'inclusive' => true,
    ),
),
'cat' => 41,
'fields' => 'ids',
);
5 мар. 2015 г. 09:15:35