Я работаю с списком предстоящих событий. Я создаю персонализированный тип сообщения с настраиваемым полем: [event_start_date]. У меня также есть несколько событий расширения, определенных дополнительным настраиваемым полем: [event_end_date]. Затем у меня есть два вида событий (примеры):
Я хотел бы отображать события с «стартом» или «датой окончания» позже текущего времени, но я потерпел неудачу.
Я считаю, что формат даты верен, потому что я начал использовать другой запрос, который отлично работает только с использованием [даты начала]. Моя проблема заключается в условии «OR» end_date. Я пробовал с meta_query с отношением «OR», но не работает:
$args = array( 'post_type' => 'eventos2', 'posts_per_page' => 4, 'meta_key' => 'event_start_date', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => array( 'relation' => 'OR', array('key' => 'event_start_date', 'value' => date('Y/m/d', strtotime('-1 day')), 'compare' => '>=') array('key' => 'event_end_date', 'value' => date('Y/m/d', strtotime('-1 day')), 'compare' => '>=') ) ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $end = DateTime::createFromFormat('Y/m/d', get_field('event_end_date')); $start = DateTime::createFromFormat('Y/m/d', get_field('event_start_date')); if ($end !='') { /*print events with start and end_date*/ echo "<li>"; echo the_title(), "</br>"; echo $start-> format('Y/m/d')," ". to . " ". $end-> format('Y/m/d'); echo "</li>"; } else { /*print events with only start_date*/ echo "<li>"; echo the_title(), "</br>"; echo $start-> format('Y/m/d'); echo "</li>"; } endwhile; ?>
Он показывает этот результат:
Как вы можете видеть, EVENT 1 указан, несмотря на прошлое событие. Более того, события в беспорядке.
Я буду признателен за любую ориентацию проблемы.
Редактировать:
Я считаю, что мои комментарии ниже по-прежнему актуальны, но я подозреваю, что часть проблемы – это
'relation' => 'OR',
Это должно быть «AND» (это значение по умолчанию, поэтому его можно удалить), чтобы гарантировать, что он возвращает только сообщения, которые удовлетворяют обоим условиям. В настоящее время он вернет события, которые начинаются или заканчиваются после вчерашнего дня. По сути, это возвращает все события, которые заканчиваются вчера или после.
Конечно, это может быть только частью проблемы …
Я не вижу ничего плохого в самом запросе, но строковое представление дат ваших событий вызовет проблемы с запросами (без примеров трудно сказать, является ли это проблемой). Если вы собираетесь сортировать строковое представление дат, а не временную метку, формат m/d/Y
не будет сортироваться должным образом:
01/01/2012 происходит после, но появляется перед
11/01/1012
например! Формат Y/m/d
будет работать.