Как автоматически создавать и отображать события в WordPress

Автоматизация создания и отображения событий в WordPress — востребованная задача для сайтов с календарями мероприятий, расписаниями и анонсами. В этой статье подробно разберём, как можно автоматически создавать события, хранить их в базе и выводить на сайте в удобном формате, используя кастомные типы записей, метаданные и примеры кода. Также рассмотрим полезные плагины, которые помогут упростить задачу.

Создание кастомного типа записей для событий в WordPress

Для начала создадим отдельный тип записи event, чтобы отделить события от обычных постов и страниц. Это позволяет гибко управлять данными и выводить события в отдельном разделе.

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpgenerate_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', 'thumbnail'),
        'show_in_rest' => true,
    );
    register_post_type('event', $args);
}
add_action('init', 'wpgenerate_register_event_post_type');

Теперь в админке появится раздел «События» для удобного управления.

Добавление метаполей для даты и времени события

Чтобы хранить дату и время, нужны дополнительные поля. Рекомендуется использовать метаполя event_date и event_time.

Добавим метабокс с полями для даты и времени:

function wpgenerate_add_event_meta_boxes() {
    add_meta_box('wpgenerate_event_date_time', 'Дата и время события', 'wpgenerate_event_date_time_callback', 'event', 'side', 'default');
}
add_action('add_meta_boxes', 'wpgenerate_add_event_meta_boxes');

function wpgenerate_event_date_time_callback($post) {
    $event_date = get_post_meta($post->ID, 'event_date', true);
    $event_time = get_post_meta($post->ID, 'event_time', true);
    wp_nonce_field('wpgenerate_event_date_time_save', 'wpgenerate_event_date_time_nonce');
    echo '<label for="event_date">Дата события:</label><br>';
    echo '<input type="date" id="event_date" name="event_date" value="'.esc_attr($event_date).'" style="width:100%;"><br><br>';
    echo '<label for="event_time">Время события:</label><br>';
    echo '<input type="time" id="event_time" name="event_time" value="'.esc_attr($event_time).'" style="width:100%;">';
}

function wpgenerate_save_event_date_time($post_id) {
    if (!isset($_POST['wpgenerate_event_date_time_nonce']) || !wp_verify_nonce($_POST['wpgenerate_event_date_time_nonce'], 'wpgenerate_event_date_time_save')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['event_date'])) {
        update_post_meta($post_id, 'event_date', sanitize_text_field($_POST['event_date']));
    }
    if (isset($_POST['event_time'])) {
        update_post_meta($post_id, 'event_time', sanitize_text_field($_POST['event_time']));
    }
}
add_action('save_post', 'wpgenerate_save_event_date_time');

Теперь при создании или редактировании события можно указать дату и время.

Автоматическое создание событий из массива данных

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

function wpgenerate_create_events_from_array($events) {
    foreach ($events as $event) {
        // Проверяем, есть ли уже событие с таким названием и датой
        $existing = new WP_Query(array(
            'post_type' => 'event',
            'title' => $event['title'],
            'meta_query' => array(
                array(
                    'key' => 'event_date',
                    'value' => $event['date'],
                    'compare' => '=',
                ),
            ),
        ));
        if ($existing->have_posts()) {
            continue; // Пропускаем дубликаты
        }
        // Создаём новое событие
        $post_id = wp_insert_post(array(
            'post_title' => wp_strip_all_tags($event['title']),
            'post_content' => $event['description'],
            'post_status' => 'publish',
            'post_type' => 'event',
        ));
        if ($post_id) {
            update_post_meta($post_id, 'event_date', $event['date']);
            update_post_meta($post_id, 'event_time', $event['time']);
        }
    }
}

// Пример вызова
$events_to_add = array(
    array(
        'title' => 'Вебинар по WordPress',
        'description' => 'Подробный разбор создания событий.',
        'date' => '2024-07-15',
        'time' => '18:00',
    ),
    array(
        'title' => 'Онлайн-конференция',
        'description' => 'Обсуждаем новинки WordPress.',
        'date' => '2024-08-01',
        'time' => '10:00',
    ),
);
wpgenerate_create_events_from_array($events_to_add);

Так можно автоматически загружать события из API, CSV или других источников, вызывая эту функцию.

Вывод событий на сайте с фильтрацией по дате

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

function wpgenerate_get_upcoming_events($limit = 10) {
    $today = date('Y-m-d');
    $args = array(
        'post_type' => 'event',
        'posts_per_page' => $limit,
        'meta_key' => 'event_date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => array(
            array(
                'key' => 'event_date',
                'value' => $today,
                'compare' => '>=',
                'type' => 'DATE',
            ),
        ),
    );
    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return '<p>Ближайших событий нет.</p>';
    }
    $output = '<ul class="wpgenerate-events-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $date = get_post_meta(get_the_ID(), 'event_date', true);
        $time = get_post_meta(get_the_ID(), 'event_time', true);
        $output .= '<li><strong>' . get_the_title() . '</strong> — ' . esc_html($date);
        if ($time) {
            $output .= ' в ' . esc_html($time);
        }
        $output .= '<br>' . get_the_excerpt() . '</li>';
    }
    $output .= '</ul>';
    wp_reset_postdata();
    return $output;
}

// Использование в шаблоне или в шорткоде
add_shortcode('wpgenerate_upcoming_events', function() {
    return wpgenerate_get_upcoming_events(5);
});

Добавьте шорткод [wpgenerate_upcoming_events] в нужное место, чтобы вывести список ближайших событий.

Рекомендации по использованию плагинов для событий

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

  • OmniVideo — позволяет создавать видео-мероприятия с автоматической публикацией и уведомлениями.
  • WPCommunity — плагин для организации сообществ с календарём событий, RSVP и обменом сообщениями.

Интеграция собственного кода с этими плагинами позволяет расширить функционал и автоматизировать процессы.

Автоматизация создания событий с помощью WP-Cron и REST API

Можно настроить периодическое создание событий через WP-Cron, вызывая функцию импорта из внешних источников.

Пример регистрации задачи:

function wpgenerate_schedule_events_import() {
    if (!wp_next_scheduled('wpgenerate_import_events_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpgenerate_import_events_hook');
    }
}
add_action('wp', 'wpgenerate_schedule_events_import');

add_action('wpgenerate_import_events_hook', 'wpgenerate_import_events_function');

function wpgenerate_import_events_function() {
    // Здесь логика получения данных из API и вызова wpgenerate_create_events_from_array
}

Для создания и обновления событий через REST API можно расширить стандартный API:

add_action('rest_api_init', function () {
    register_rest_route('wpgenerate/v1', '/events', array(
        'methods' => 'POST',
        'callback' => 'wpgenerate_rest_create_event',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
    ));
});

function wpgenerate_rest_create_event(WP_REST_Request $request) {
    $title = sanitize_text_field($request->get_param('title'));
    $description = sanitize_textarea_field($request->get_param('description'));
    $date = sanitize_text_field($request->get_param('date'));
    $time = sanitize_text_field($request->get_param('time'));

    $post_id = wp_insert_post(array(
        'post_title' => $title,
        'post_content' => $description,
        'post_status' => 'publish',
        'post_type' => 'event',
    ));

    if (!$post_id) {
        return new WP_Error('cant-create', __('Не удалось создать событие'), array('status' => 500));
    }

    update_post_meta($post_id, 'event_date', $date);
    update_post_meta($post_id, 'event_time', $time);

    return array('id' => $post_id, 'message' => 'Событие создано');
}

Это открывает возможности для интеграции с внешними сервисами и мобильными приложениями.

WooCommerce: автоматическое удаление неактивных вариаций товаров с помощью кода
15.05.2026
Как автоматизировать создание и отправку email-рассылок в WordPress
28.02.2026
Как автоматически отправлять сообщения в Telegram из WordPress
09.03.2026
Как автоматизировать создание alt-текста для изображений в WordPress
10.02.2026
Как автоматически отправлять сообщения в Telegram из WordPress
25.02.2026