Вопрос или проблема
После миграции моего сайта на 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',
)
);
Рекомендации
-
Дата и Время: Убедитесь, что временная зона вашего сайта правильно настроена в админ-панели WordPress. Это повлияет на работу функции
current_time()
. -
Тестирование: После внесения изменений протестируйте оба запроса на вашем сайте, чтобы убедиться, что они возвращают правильные результаты. Используйте
var_dump()
или другие отладочные средства для вывода результата запроса. -
Оптимизация: Если у вас большое количество событий, рассмотрите возможность пагинации для улучшения производительности.
-
SEO: Убедитесь, что страницы с событиями оптимизированы для SEO. Добавьте мета-теги, заголовки и уникальные описания для каждой категории событий.
Таким образом, с помощью указанных выше доработок, ваш сайт будет корректно отображать как прошедшие, так и будущие события, что обеспечит лучшую навигацию и пользовательский опыт для ваших посетителей.