Отображение события в течение двух заданных временных рамок

Я пытаюсь отобразить два разных сообщения из моего CPT с именем Events.

Одно будет следующим событием, другим будет предыдущее событие.

У меня есть метабокс под названием «Дата события». Клиент в данный момент назначает дату события.

Я думаю о том, чтобы каким-то образом использовать эту дату в качестве «прерывателя», если она была записана в формате DMY и эта дата прошла, то это событие не будет отображаться в следующем событии, вроде даты истечения срока действия.

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

Вот как логика будет работать у меня в голове, однако я не могу найти правильный ступень, чтобы начать.

Извините, если это не очень понятно.

Solutions Collecting From Web of "Отображение события в течение двух заданных временных рамок"

Запрос в таблице метаданных медленный, и поскольку, поскольку он также используется для общих данных, вы должны быть осторожны в своем формате даты, если вы там сохраняете даты. Например, с форматом dmY :

  • 01112014 (1 ноября 2014 года)
  • 11012014 (11 января 2014 года)
  • 12052014 (12 мая 2014 года)

является «правильным» в том, что цифры отсортированы правильно, но дает вам неправильный порядок, хронологически (обычно это то, что вы хотите с событиями).

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

 $args = array( 'post_type' => 'event', 'posts_per_page' => 1, 'meta_query' => array( array( 'key' => 'date', //or whatever key you're using 'value' => date_i18n( 'Ymd' ), 'compare' => '>=' ) ), 'orderby' => 'meta_value', 'meta_key' => 'date', //or whatever key you're using 'order' => 'asc', ); $events = get_posts( $args ); if( $events ){ $next_event = array_pop( $events ); }else{ //no event found } 

Тем не менее, лучше избегать метаданных сообщений (для проблем с производительностью – это еще хуже для повторяющихся событий, если вам когда-нибудь понадобится). Кроме того, есть куча разных плагинов управления событиями ( я создал: Event Organizer ), которые не только обрабатывают все это для вас, но и предоставляют пользовательский интерфейс для пользователя, а не используют настраиваемые поля.

С помощью Event Organizer вы можете получить следующее событие:

 $events = eo_get_events( array( 'event_start_after' => 'now', 'posts_per_page' => 1 )); if( $events ){ $next_event = array_pop( $events ); }