Запрашивайте только прошлые события и только будущие события в календаре событий.

Вопрос или проблема

После миграции моего сайта на SiteGround я не знаю, почему моя страница мероприятий не работает должным образом. Мой список прошлых и будущих событий перепутан. Все списки отображают все события, как будущие, так и прошедшие.

Мой код для будущих событий:

if (
    $post->post_type=='page' && 
    (
        $post->post_name=='eventi' ||
        $post->post_name=='events'
    )
) {  
    $events = new WP_Query(
        array(
            'post_type' => 'tribe_events',
            'posts_per_page' => -1,
        )
    );
}

А код для прошлых событий:

$past_events = new WP_Query(
    array(
        'posts_per_page'=>-1,
        'eventDisplay'=>'past',
        'post_type' => 'tribe_events'
    )
);

Я много пытался, но не могу разобраться. Буду признателен за любую помощь, спасибо.

Для прошлых событий:
Я использовал функцию даты в соответствии с часовым поясом. В wp-запрос можно также добавить другую дату.

date_default_timezone_set('America/Winnipeg');
$date2 = date('y-m-d h:i');
$pastEvents = tribe_get_events( [
  'start_date'   => '2014-10-01 00:01',
  'end_date'   => $date2,
  'posts_per_page' => 10,
] );

Для будущих событий:

$pastEvents = array(
  'post_type' => 'tribe_events',
  'post_status' => 'publish',
  'posts_per_page' => 10,
  'order' => 'rand',
  'date_query' => array(
    'before' => 'today', // сегодня можно также заменить на сейчас
    'inclusive' => true
   )
);

Для получения более подробной информации посетите:
функция date
tribe_get_events

Ответ или решение

Для решения проблемы с отображением событий (прошедших и будущих) на вашем сайте после миграции на хостинг SiteGround, необходимо внести изменения в текущий код запросов. Давайте рассмотрим детали, чтобы обеспечить правильное отображение событий в соответствующих категориях.

Запрос для Будущих Событий

Ваш текущий запрос для получения будущих событий выглядит так:

$events = new WP_Query(
    array(
        'post_type' => 'tribe_events',
        'posts_per_page' => -1,
    )
);

Однако этот запрос вернет все события, включая будущие и прошедшие. Чтобы правильно отфильтровать только будущие события, вам нужно использовать параметр meta_query в сочетании с date_query. Вот улучшенный пример:

$future_events = new WP_Query(
    array(
        'post_type' => 'tribe_events',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => '_EventStartDate',
                'value' => current_time('Y-m-d H:i:s'),
                'compare' => '>=',
                'type' => 'DATETIME',
            ),
        ),
        'orderby' => 'meta_value',
        'order' => 'ASC',
    )
);

Запрос для Прошедших Событий

Ваш код для получения прошедших событий выглядит следующим образом:

$past_events = new WP_Query(
    array(
        'posts_per_page' => -1,
        'eventDisplay' => 'past',
        'post_type' => 'tribe_events'
    )
);

Этот код также не учитывает фильтрацию по дате. Требуется использовать meta_query и date_query, чтобы получить только те события, которые прошли. Вот корректный код:

$past_events = new WP_Query(
    array(
        'post_type' => 'tribe_events',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => '_EventEndDate',
                'value' => current_time('Y-m-d H:i:s'),
                'compare' => '<',
                'type' => 'DATETIME',
            ),
        ),
        'orderby' => 'meta_value',
        'order' => 'DESC',
    )
);

Рекомендации

  1. Дата и Время: Убедитесь, что временная зона вашего сайта правильно настроена в админ-панели WordPress. Это повлияет на работу функции current_time().

  2. Тестирование: После внесения изменений протестируйте оба запроса на вашем сайте, чтобы убедиться, что они возвращают правильные результаты. Используйте var_dump() или другие отладочные средства для вывода результата запроса.

  3. Оптимизация: Если у вас большое количество событий, рассмотрите возможность пагинации для улучшения производительности.

  4. SEO: Убедитесь, что страницы с событиями оптимизированы для SEO. Добавьте мета-теги, заголовки и уникальные описания для каждой категории событий.

Таким образом, с помощью указанных выше доработок, ваш сайт будет корректно отображать как прошедшие, так и будущие события, что обеспечит лучшую навигацию и пользовательский опыт для ваших посетителей.

Оцените материал
Добавить комментарий

Капча загружается...