0

Я выполняю задачу для управления событиями, я закодировал виджет, чтобы отображать входящие или прошлые события на боковой панели, но я не могу обрабатывать настраиваемые поля в качестве даты. следующий мой код, а дата хранится как «m/d/Y». Пожалуйста, помогите мне решить эту проблему. Спасибо adanceКак сравнить пользовательские поля даты в Wordpress?

$today = date('m/d/Y'); 
    $args = array(
     'post_type' => 'event', 
     'post_status' => 'publish', 
     'meta_key' => 'event_date', 
     'posts_per_page' => '5', 
     'meta_query' => array(
           array(
            'key' => 'event_date', 
            'value' => $today, 
            'compare' => '<=', 
            'type' => 'date' 
           ) 
     ), 
     'orderby' => 'meta_value_num', 
     'order' => 'ASC' 
    ); 

    $the_query = new WP_Query($args); 

ответ

1

Дата должна быть в формате YYYY-MM-DD для сравнения meta_query работать

$today = date("Y-m-d"); 
+0

WordPress имеет функцию для этого: 'current_time' https://codex.wordpress.org/Function_Reference/current_time –

+0

Спасибо, он отлично работает, просто имейте в виду, дата сохранения также должна быть в этом формате. –

0

Хотя я согласен с предыдущим ответом (вы должны хранить даты в формате YYYY-MM-DD), Я думал, что смогу найти обходное решение с использованием Wordpress-фильтра, так что идите.

Это должно войти в ваш functions.php файл:

add_filter('posts_where', 'my_callback', 10, 2); 
function my_callback($where, $wp_query_obj) { 
    if(isset($wp_query_obj->query['date_format'])) { 
     $where = preg_replace('~CAST\((.+?)\)~', "STR_TO_DATE(CAST($1), '{$wp_query_obj->query['date_format']}')", $where); 
    } 
    return $where; 
} 

И это ваш запрос:

$today = date('m/d/Y'); 
$args = array(
    'post_type'  => 'event', 
    'posts_per_page' => '5', 
    'meta_key'  => 'event_date', 
    'meta_value'  => $today, 
    'meta_compare' => '<=', 
    'date_format' => '%m/%d/%Y' 
    'orderby'  => 'meta_value_num', 
    'order'   => 'ASC' 
); 
$the_query = new WP_Query($args); 

Ключевым моментом здесь является date_format аргумент, который я добавил к запросу, если вы этого не сделаете добавьте фильтр, который не будет применен.

Это может работать с другими форматами дат, вам нужно только изменить аргумент date_format в соответствии с форматом параметров STR_TO_DATE MySQL function.

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