Как сделать динамический календарь событий в WordPress с AJAX и темой Hueman

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

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

Для начала нужно зарегистрировать собственный тип записей — hueman_event — для удобного управления событиями в админке WordPress. Добавим код в файл functions.php вашей дочерней темы Hueman или в отдельный плагин:

function hueman_register_event_post_type() {
    $labels = array(
        'name'               => 'События',
        'singular_name'      => 'Событие',
        'menu_name'          => 'События',
        'name_admin_bar'     => 'Событие',
        '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('hueman_event', $args);
}
add_action('init', 'hueman_register_event_post_type');

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

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

Для календаря обязательно нужно хранить дату события. Для этого добавим метаполе hueman_event_date. Можно использовать плагин Advanced Custom Fields (ACF) или создать поле вручную, например, так:

function hueman_event_add_meta_boxes() {
    add_meta_box('hueman_event_date', 'Дата события', 'hueman_event_date_callback', 'hueman_event', 'side');
}
add_action('add_meta_boxes', 'hueman_event_add_meta_boxes');

function hueman_event_date_callback($post) {
    wp_nonce_field('hueman_save_event_date', 'hueman_event_date_nonce');
    $value = get_post_meta($post->ID, 'hueman_event_date', true);
    echo '<input type="date" name="hueman_event_date" value="' . esc_attr($value) . '" />';
}

function hueman_save_event_date($post_id) {
    if (!isset($_POST['hueman_event_date_nonce']) || !wp_verify_nonce($_POST['hueman_event_date_nonce'], 'hueman_save_event_date')) {
        return;
    }
    if (array_key_exists('hueman_event_date', $_POST)) {
        update_post_meta($post_id, 'hueman_event_date', sanitize_text_field($_POST['hueman_event_date']));
    }
}
add_action('save_post', 'hueman_save_event_date');

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

Вывод календаря на фронтенде с AJAX-подгрузкой событий

Чтобы календарь не перегружал страницу, сделаем динамическую подгрузку событий для выбранного месяца с помощью AJAX. Начнем с создания простого HTML-календаря с навигацией по месяцам:

function hueman_render_events_calendar() {
    $current_year = date('Y');
    $current_month = date('m');
    ?>
    <div id="hueman-events-calendar" data-year="<?php echo $current_year; ?>" data-month="<?php echo $current_month; ?>">
        <div class="calendar-header">
            <button id="hueman-prev-month"><< Пред</button>
            <span id="hueman-current-month"><?php echo date('F Y'); ?></span>
            <button id="hueman-next-month">След >></button>
        </div>
        <div id="hueman-calendar-events">Загрузка событий...</div>
    </div>
    <script>
    jQuery(document).ready(function($) {
        function huemanLoadEvents(year, month) {
            $('#hueman-calendar-events').html('Загрузка событий...');
            $.ajax({
                url: hueman_ajax_obj.ajax_url,
                type: 'POST',
                data: {
                    action: 'hueman_load_events',
                    year: year,
                    month: month
                },
                success: function(response) {
                    $('#hueman-calendar-events').html(response);
                    $('#hueman-current-month').text(new Date(year, month - 1).toLocaleString('ru-RU', { month: 'long', year: 'numeric' }));
                    $('#hueman-events-calendar').data('year', year).data('month', month);
                }
            });
        }

        huemanLoadEvents($('#hueman-events-calendar').data('year'), $('#hueman-events-calendar').data('month'));

        $('#hueman-prev-month').click(function() {
            var year = parseInt($('#hueman-events-calendar').data('year'));
            var month = parseInt($('#hueman-events-calendar').data('month')) - 1;
            if (month === 0) {
                month = 12;
                year--;
            }
            huemanLoadEvents(year, month);
        });

        $('#hueman-next-month').click(function() {
            var year = parseInt($('#hueman-events-calendar').data('year'));
            var month = parseInt($('#hueman-events-calendar').data('month')) + 1;
            if (month === 13) {
                month = 1;
                year++;
            }
            huemanLoadEvents(year, month);
        });
    });
    </script>
    <?php
}
add_shortcode('hueman_events_calendar', 'hueman_render_events_calendar');

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

Обработка AJAX-запроса и вывод событий

Теперь создадим серверный обработчик AJAX, который вернет список событий за нужный месяц:

function hueman_ajax_load_events() {
    $year = isset($_POST['year']) ? intval($_POST['year']) : date('Y');
    $month = isset($_POST['month']) ? intval($_POST['month']) : date('m');

    $start_date = sprintf('%04d-%02d-01', $year, $month);
    $end_date = date('Y-m-d', strtotime($start_date . ' +1 month -1 day'));

    $query = new WP_Query(array(
        'post_type'      => 'hueman_event',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => 'hueman_event_date',
                'value'   => array($start_date, $end_date),
                'compare' => 'BETWEEN',
                'type'    => 'DATE',
            ),
        ),
        'orderby'        => 'meta_value',
        'order'          => 'ASC',
    ));

    if ($query->have_posts()) {
        echo '<ul class="hueman-events-list">';
        while ($query->have_posts()) {
            $query->the_post();
            $date = get_post_meta(get_the_ID(), 'hueman_event_date', true);
            echo '<li><strong>' . esc_html($date) . ':</strong> <a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        echo '</ul>';
    } else {
        echo '<p>Событий не найдено на этот месяц.</p>';
    }
    wp_reset_postdata();
    wp_die();
}
add_action('wp_ajax_hueman_load_events', 'hueman_ajax_load_events');
add_action('wp_ajax_nopriv_hueman_load_events', 'hueman_ajax_load_events');

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

Подключение AJAX-скрипта и локализация

Чтобы AJAX-запросы работали, нужно подключить jQuery и локализовать параметры ajax_url в шаблоне. Добавьте код в functions.php:

function hueman_enqueue_scripts() {
    wp_enqueue_script('jquery');
    wp_localize_script('jquery', 'hueman_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
    ));
}
add_action('wp_enqueue_scripts', 'hueman_enqueue_scripts');

Скрипт jQuery уже встроен в WordPress, мы только локализуем объект с адресом для AJAX.

Стилизация и интеграция с темой Hueman

Для аккуратного отображения календаря добавим базовые стили. В файле стилей дочерней темы или через кастомный CSS вставьте:

#hueman-events-calendar {
    max-width: 400px;
    margin: 20px auto;
    border: 1px solid #ddd;
    padding: 15px;
    background: #fff;
    border-radius: 5px;
}

.calendar-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
}

.calendar-header button {
    background: #0073aa;
    color: #fff;
    border: none;
    padding: 7px 12px;
    cursor: pointer;
    border-radius: 3px;
}

.calendar-header button:hover {
    background: #005177;
}

.hueman-events-list {
    list-style: none;
    padding-left: 0;
}

.hueman-events-list li {
    padding: 5px 0;
    border-bottom: 1px solid #eee;
}

.hueman-events-list li:last-child {
    border-bottom: none;
}

Эти стили хорошо впишутся в минималистичный и адаптивный дизайн темы Hueman.

Итог: использование шорткода и расширение функционала

Вставьте в любую страницу или запись шорткод [hueman_events_calendar] — и у вас появится динамический календарь с навигацией по месяцам и подгрузкой событий через AJAX.

Дальше вы можете расширить функционал, например, добавив категории событий, фильтры, интеграцию с Google Calendar или уведомления. Для удобной работы с SEO и оптимизацией можно использовать плагин Clearfy Pro, который поможет оптимизировать загрузку и работу сайта.

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отключить Gutenberg и вернуть классический редактор WordPress
14.04.2026
Как создать динамический календарь событий в WordPress с поддержкой AJAX
24.02.2026
Как реализовать отложенную публикацию постов в WordPress с примерами кода
09.02.2026
Как создать динамические таблицы в WordPress с помощью шорткодов
20.11.2025
Как добавить обратную связь с привязкой к пользователю в WordPress
13.03.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее