Как изменить календарь в Gutenberg блоках WordPress

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

Почему стоит изменять стандартный календарь Gutenberg

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

  • Отобразить события с пользовательскими метками, а не просто даты постов.
  • Добавить всплывающие подсказки с описанием событий при наведении.
  • Изменить стили календаря под цветовую схему сайта.
  • Интегрировать календарь с кастомными типами записей.

Чтобы решить эти задачи, можно изменить стандартный блок или создать собственный блок календаря на базе Gutenberg API.

Изменение стилей стандартного календаря через CSS

Самый простой способ изменить внешний вид календаря — добавить кастомные CSS-правила в тему или плагин. Для начала нужно определить класс календаря в HTML. Обычно это .wp-block-calendar.

Например, чтобы изменить фон, цвет текста и добавить выделение текущей даты, можно добавить следующий CSS в файл стилей темы или через кастомайзер:

.wp-block-calendar table {width: 100%; border-collapse: collapse; background-color: #f9f9f9;}
.wp-block-calendar th, .wp-block-calendar td {padding: 8px; border: 1px solid #ddd; text-align: center;}
.wp-block-calendar .has-text-color a {color: #0073aa; text-decoration: none;}
.wp-block-calendar .current-date {background-color: #0073aa; color: #fff; border-radius: 50%;}

Если вы хотите изменить именно текущую дату, можно добавить JavaScript для динамического присвоения класса current-date.

Пример скрипта для подсветки текущей даты

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

function wpinfo_enqueue_calendar_script() {
    wp_enqueue_script('wpinfo-calendar', get_template_directory_uri() . '/js/calendar.js', array(), '1.0', true);
}
add_action('wp_enqueue_scripts', 'wpinfo_enqueue_calendar_script');

Создайте файл js/calendar.js с таким содержимым:

document.addEventListener('DOMContentLoaded', function() {
    const today = new Date();
    const day = today.getDate();
    const calendar = document.querySelector('.wp-block-calendar');
    if (!calendar) return;
    const cells = calendar.querySelectorAll('td');
    cells.forEach(cell => {
        if (cell.textContent == day) {
            cell.classList.add('current-date');
        }
    });
});

Создание кастомного блока календаря с расширенным функционалом

Если нужно больше, чем стили и простая подсветка, имеет смысл создать собственный блок календаря с помощью Gutenberg API и React. Рассмотрим пример создания блока, который выводит события из кастомного типа записей event с датой и описанием.

Регистрация кастомного типа записей "event"

Для начала зарегистрируем тип записей событий в functions.php:

function wpinfo_register_event_post_type() {
    register_post_type('event', array(
        'labels' => array('name' => 'События'),
        'public' => true,
        'has_archive' => true,
        'supports' => array('title', 'editor', 'custom-fields'),
    ));
}
add_action('init', 'wpinfo_register_event_post_type');

Пример простого кастомного блока календаря

Для создания блока используем @wordpress/create-block или вручную добавим файлы с JavaScript. Ниже пример основного файла блока src/index.js:

import { registerBlockType } from '@wordpress/blocks';
import { useSelect } from '@wordpress/data';
import { ServerSideRender } from '@wordpress/components';

registerBlockType('wpinfo/custom-calendar', {
    title: 'Кастомный календарь событий',
    icon: 'calendar',
    category: 'widgets',
    edit() {
        return (
            <ServerSideRender
                block="wpinfo/custom-calendar"
            />
        );
    },
    save() {
        return null; // динамический блок
    },
});

PHP-рендеринг блока с выборкой событий

Добавим в functions.php рендер-функцию для блока, которая выберет события и выведет календарь:

function wpinfo_render_custom_calendar( $attributes ) {
    $today = current_time('Y-m-d');
    $args = array(
        'post_type' => 'event',
        'posts_per_page' => -1,
        'meta_key' => 'event_date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => array(
            array(
                'key' => 'event_date',
                'value' => $today,
                'compare' => '>=',
                'type' => 'DATE',
            ),
        ),
    );
    $events = get_posts($args);

    if (empty($events)) {
        return '<p>Событий на ближайшее время нет.</p>';
    }

    $output = '<table class="wpinfo-custom-calendar"><thead><tr><th>Дата</th><th>Название</th></tr></thead><tbody>';

    foreach ($events as $event) {
        $date = get_post_meta($event->ID, 'event_date', true);
        $title = esc_html($event->post_title);
        $permalink = get_permalink($event->ID);
        $output .= "<tr><td>{$date}</td><td><a href='{$permalink}'>{$title}</a></td></tr>";
    }

    $output .= '</tbody></table>';
    return $output;
}

register_block_type('wpinfo/custom-calendar', array(
    'render_callback' => 'wpinfo_render_custom_calendar',
));

Использование плагина Clearfy Pro для улучшения производительности календаря

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

Clearfy Pro позволяет отключать ненужные модули WordPress, в том числе связанные с архивами, что уменьшит нагрузку при работе с календарём. Рекомендуется использовать Clearfy Pro в комплексе с кешированием и оптимизацией базы данных.

Выводы и рекомендации

Изменение календаря в Gutenberg блоках может быть простым или сложным, в зависимости от задачи. Если нужно лишь скорректировать стиль — достаточно CSS и небольшого JS. Для расширенного функционала лучше создавать собственный динамический блок с выводом событий из кастомного типа записей. Не забывайте оптимизировать сайт с помощью плагинов, например, Clearfy Pro для повышения скорости.

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

Как изменить slug в своей категории WordPress
15.12.2025
Как заменить default-аватар в WordPress: практическое руководство
09.04.2026
Как добавить автоматическое удаление старых записей через WP-Cron в WordPress
07.02.2026
Автоматическое удаление старого контента в WordPress: эффективные методы и примеры
11.01.2026
WooCommerce: как исправить проблему автоматического отключения корзины при добавлении товаров
20.05.2026