2012-01-02 5 views
0

Im пытается использовать фильтр в WordPress для выбора всех пост сегодня:сравнить даты, чтобы CurDate WordPress

function filter_where($where = '') { 
    $where .= " AND post_date = CURDATE() "; 
    return $where; 
} 

и не работает, но при использовании < = или> = получить сообщения.

спасибо за вашу помощь

+1

В каком столбце типа 'post_date'? –

+0

полный запрос: SELECT SQL_CALC_FOUND_ROWS wp_posts. * FROM wp_posts WHERE 1 = 1 AND wp_posts.post_type = 'Agenda_cultural' AND (wp_posts.post_status = 'publish' ИЛИ ​​wp_posts.post_status = 'future') И DATE (wp_posts.post_date) = CURDATE() ORDER BY wp_posts.post_date ASC LIMIT 0, 10 – returnvoid

+0

damm, я думаю, мой сервер не работает с правильной датой. он имеет janueary 3 (здесь в Чили все еще 2 января). Использование AND DATE (wp_posts.post_date) = DATE_ADD (CURDATE(), INTERVAL -1 DAY) работает – returnvoid

ответ

1

POST_DATE это поле DATETIME я думаю, не поле DATE. Попробуйте что-то вроде AND DATE(post_date) = CURDATE() сравнить только по дате, а не по времени.

Редактирование: теперь вы поняли, что ваш сервер MySQL имеет неправильный часовой пояс. Вы можете исправить это по каждому соединению. Я бы предложил найти бит кода, где Wordpress подключается к базе данных и добавляет эти две строки кода после подключения. Вы можете найти mysql_connect или mysql_select_db, чтобы найти это.

$query = "SET time_zone = 'Chile/Santiago'"; 
mysql_query($query); 

После того как вы сделали это, то следующий код должен работать, вероятно, как и на мой первоначальный ответ:

function filter_where($where = '') { 
    $where .= " AND DATE(post_date) = CURDATE() "; 
    return $where; 
} 
+0

не работает ни. но DATETIME() - Y-m-d H: i: s. В любом случае это будет DATE (post_date) = DATE (CURDATE())? – returnvoid

+0

DATE (CURDATE()) совпадает с DATE() - оно уже возвращает значение типа «дата». Сравнение DATE (post_date) с CURDATE() должно работать. – SpoonNZ

0

Если post_date является DateTime или временная метка столбца, вы должны использовать:

AND post_date >= CURDATE() 
AND post_date < CURDATE() + INTERVAL 1 DAY  --- this is needed just in case 
               --- your table has posts with 
               --- future dates (by error) 
+0

- дата и время. Это не работает – returnvoid

+0

Отсутствуют некоторые скобки из второго CURDATE - должно быть CURDATE(). Независимо от того, что использование «DATE (post_date) = CURDATE()» должно быть более чистым и давать те же результаты, на которые я верю? – SpoonNZ

+0

@SpoonNZ: Thnx, добавил отсутствующие скобки. Он может быть более чистым, но тогда запрос не может использовать какой-либо индекс в таблице, и он должен сканировать всю таблицу - и конвертировать (каждую строку) дату и время на дату, чтобы провести сравнение. Если у вас несколько тысяч сообщений или более, попробуйте время для двух версий. –

Смежные вопросы