Календарь мероприятий — важный элемент для многих бизнес-сайтов на WordPress, особенно если вы регулярно проводите встречи, вебинары, тренинги или другие события. В этой статье разберём, как автоматизировать создание и обновление календаря мероприятий с помощью кода и плагинов. Это позволит вам избежать рутинного ручного добавления событий и сделать сайт более динамичным.
Почему стоит автоматизировать календарь мероприятий в WordPress
Ручное добавление событий в календарь — процесс трудоёмкий и подверженный ошибкам. При большом количестве мероприятий легко запутаться, забыть обновить дату или время, а также неактуальные события могут оставаться на сайте, ухудшая пользовательский опыт.
Автоматизация календаря помогает:
- Сократить время на администрирование;
- Убедиться, что все события актуальны;
- Интегрировать календарь с внешними источниками данных (например, Google Calendar или CRM);
- Обеспечить удобный интерфейс для пользователей с фильтрами и сортировкой;
- Автоматически удалять или архивировать прошедшие события.
Выбор плагина для календаря мероприятий
Для начала рассмотрим популярные плагины, которые поддерживают автоматизацию и расширяемы через код.
The Events Calendar
Один из самых популярных плагинов с большим функционалом: поддерживает интеграцию с Google Calendar, автоматическую публикацию событий, фильтры и виджеты. Плагин имеет расширения для автоматизации и API для разработчиков.
Event Organiser
Этот плагин позволяет создавать повторяющиеся события и управлять ими через кастомные типы записей. Он удобен для разработчиков, так как легко расширяется через хуки и фильтры.
WP Event Manager
Лёгкий и гибкий плагин с поддержкой REST API, что позволяет создавать автоматические импорты и обновления событий из внешних систем.
Автоматизация создания и обновления событий через код
Рассмотрим пример, как программно добавить событие и обновить его с помощью собственного кода. В этом примере используем кастомный тип записи wpbusiness_event.
function wpbusiness_register_event_post_type() {
$labels = array(
'name' => 'События',
'singular_name' => 'Событие',
'add_new' => 'Добавить событие',
'add_new_item' => 'Добавить новое событие',
'edit_item' => 'Редактировать событие',
'new_item' => 'Новое событие',
'view_item' => 'Просмотреть событие',
'search_items' => 'Поиск событий',
'not_found' => 'События не найдены',
'not_found_in_trash' => 'События не найдены в корзине',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'events'),
'supports' => array('title', 'editor', 'custom-fields'),
'show_in_rest' => true,
);
register_post_type('wpbusiness_event', $args);
}
add_action('init', 'wpbusiness_register_event_post_type');
// Функция создания события
function wpbusiness_create_event($title, $content, $start_date, $end_date) {
$event_id = wp_insert_post(array(
'post_type' => 'wpbusiness_event',
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
));
if ($event_id) {
update_post_meta($event_id, 'start_date', $start_date);
update_post_meta($event_id, 'end_date', $end_date);
}
return $event_id;
}
// Пример использования
$event_id = wpbusiness_create_event(
'Вебинар по SEO',
'Подробный вебинар о продвижении сайта',
'2024-07-01 10:00:00',
'2024-07-01 12:00:00'
);
Таким образом вы можете программно создавать события и задавать для них даты начала и окончания. Чтобы обновить событие, достаточно использовать функцию wp_update_post и update_post_meta.
Автоматическое удаление или архивирование прошедших событий
Для поддержания актуальности календаря удобно автоматически удалять или менять статус событий после их окончания. Вот пример функции, которую можно запускать через Cron и которая меняет статус прошедших событий на «архив».
function wpbusiness_archive_past_events() {
$today = date('Y-m-d H:i:s');
$args = array(
'post_type' => 'wpbusiness_event',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'end_date',
'value' => $today,
'compare' => '<',
'type' => 'DATETIME',
),
),
'post_status' => 'publish',
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
wp_update_post(array(
'ID' => get_the_ID(),
'post_status' => 'draft', // или 'private' для скрытия
));
}
}
wp_reset_postdata();
}
// Добавьте в wp_cron для регулярного запуска
add_action('wpbusiness_daily_event_archive', 'wpbusiness_archive_past_events');
// Для теста можно вызвать напрямую
// wpbusiness_archive_past_events();
Для активации этого крона можно использовать:
if (!wp_next_scheduled('wpbusiness_daily_event_archive')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_daily_event_archive');
}
Интеграция с внешними календарями и CRM
Если ваши мероприятия хранятся в Google Calendar или CRM, можно автоматизировать импорт событий через REST API. Например, плагин WP Event Manager поддерживает REST API, с помощью которого можно написать скрипт импорта.
Пример импорта событий из Google Calendar можно сделать через PHP и Google API Client. Основные шаги:
- Создать Google API проект и получить ключи;
- Получить события из календаря за нужный период;
- Сравнить с уже имеющимися событиями на сайте по уникальному идентификатору;
- Добавить новые и обновить существующие через функции, описанные выше.
Это сложный процесс, но он значительно сэкономит время при большом количестве мероприятий и сделает календарь максимально актуальным.
Советы по улучшению UX календаря
Чтобы пользователи легко ориентировались в календаре, добавьте:
- Фильтры по категориям или типам событий;
- Возможность поиска по названию и описанию;
- Всплывающие подсказки с подробной информацией;
- Адаптивный дизайн для мобильных устройств;
- Интеграцию с личными календарями (Google, Outlook) через кнопки «Добавить в календарь».
Для этих целей удобно использовать готовые решения из тем Reboot или Root, которые уже оптимизированы под бизнес-сайты и поддерживают расширения календарей.