Как создать автоматический календарь мероприятий в WordPress с фильтрацией и выводом

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

Создание пользовательского типа записи для событий (Custom Post Type)

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

function wpsocial_register_event_cpt() {
    $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,
        'menu_position' => 5,
        'supports' => array('title', 'editor', 'thumbnail'),
        'rewrite' => array('slug' => 'events'),
        'show_in_rest' => true
    );
    register_post_type('event', $args);
}
add_action('init', 'wpsocial_register_event_cpt');

После добавления этого кода в functions.php вашей темы или в отдельный плагин, в админке появится новый раздел "События".

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

Чтобы хранить дату проведения события и его категорию, создадим мета-поля с помощью Clearfy Pro или вручную через мета-боксы.

Пример создания мета-бокса с датой:

function wpsocial_add_event_meta_box() {
    add_meta_box('wpsocial_event_date', 'Дата события', 'wpsocial_event_date_callback', 'event', 'side');
}
add_action('add_meta_boxes', 'wpsocial_add_event_meta_box');

function wpsocial_event_date_callback($post) {
    wp_nonce_field('wpsocial_save_event_date', 'wpsocial_event_date_nonce');
    $value = get_post_meta($post->ID, '_wpsocial_event_date', true);
    echo '<input type="date" name="wpsocial_event_date" value="' . esc_attr($value) . '" />';
}

function wpsocial_save_event_date($post_id) {
    if (!isset($_POST['wpsocial_event_date_nonce']) || !wp_verify_nonce($_POST['wpsocial_event_date_nonce'], 'wpsocial_save_event_date')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpsocial_event_date'])) {
        update_post_meta($post_id, '_wpsocial_event_date', sanitize_text_field($_POST['wpsocial_event_date']));
    }
}
add_action('save_post', 'wpsocial_save_event_date');

Аналогично можно добавить мета-поле для категории или использовать стандартную таксономию «Категории» с поддержкой для типа записи event. Например, так:

function wpsocial_event_categories_taxonomy() {
    register_taxonomy('event_category', 'event', array(
        'label' => 'Категории событий',
        'hierarchical' => true,
        'show_ui' => true,
        'show_in_rest' => true,
    ));
}
add_action('init', 'wpsocial_event_categories_taxonomy');

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

Теперь создадим шаблон для вывода календаря на фронтенде с фильтрацией. Для примера сделаем простой shortcode [wpsocial_events_calendar], который можно вставлять в любую страницу.

function wpsocial_events_calendar_shortcode($atts) {
    $atts = shortcode_atts(array(
        'category' => '',
        'show_past' => false
    ), $atts);

    $meta_query = array();
    $today = date('Y-m-d');

    if (!$atts['show_past']) {
        $meta_query[] = array(
            'key' => '_wpsocial_event_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'DATE'
        );
    }

    $tax_query = array();
    if (!empty($atts['category'])) {
        $tax_query[] = array(
            'taxonomy' => 'event_category',
            'field' => 'slug',
            'terms' => explode(',', $atts['category'])
        );
    }

    $args = array(
        'post_type' => 'event',
        'posts_per_page' => -1,
        'meta_key' => '_wpsocial_event_date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => $meta_query,
        'tax_query' => $tax_query
    );

    $events = new WP_Query($args);

    if (!$events->have_posts()) {
        return '<p>События не найдены.</p>';
    }

    $output = '<div class="wpsocial-events-calendar">';
    $current_month = '';

    while ($events->have_posts()) {
        $events->the_post();
        $event_date = get_post_meta(get_the_ID(), '_wpsocial_event_date', true);
        $month = date_i18n('F Y', strtotime($event_date));

        if ($month !== $current_month) {
            if ($current_month !== '') {
                $output .= '</ul>';
            }
            $output .= '<h3>' . esc_html($month) . '</h3><ul>';
            $current_month = $month;
        }

        $output .= '<li><strong>' . date_i18n('d.m.Y', strtotime($event_date)) . '</strong> — <a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    $output .= '</ul></div>';
    wp_reset_postdata();
    return $output;
}
add_shortcode('wpsocial_events_calendar', 'wpsocial_events_calendar_shortcode');

Такой календарь удобно вставлять на страницу и можно использовать атрибут category чтобы показывать мероприятия определенной категории, например [wpsocial_events_calendar category="konferencii"].

Дополнительные улучшения и плагины для удобства

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

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

Вывод

Создание собственного календаря событий в WordPress — отличная возможность сделать сайт уникальным и адаптированным под конкретные задачи. Используя кастомный тип записи, мета-поля и простой shortcode, вы сможете гибко управлять выводом и фильтрацией событий без излишних нагрузок на сайт.

WooCommerce: как автоматически удалять неактивные заказы по срокам
07.07.2026
Автоматическое добавление новостей из RSS в WordPress без плагинов
21.02.2026
WooCommerce: как автоматически собирать отзывы после покупки
21.04.2026
Автоматическая отправка сообщений покупателям в WooCommerce после оформления заказа
17.04.2026
WooCommerce: как настроить автопостинг из ВКонтакте с фильтрацией и обработкой контента
21.06.2026