Гид по технологиям

Создание пользовательского типа записи «Event» в WordPress

7 min read WordPress Обновлено 24 Dec 2025
Пользовательские типы записей в WordPress — Event
Пользовательские типы записей в WordPress — Event

Что такое пользовательские типы записей в WordPress?

Пользовательский тип записи (Custom Post Type, CPT) — это способ добавить в WordPress ещё один вид контента, отличный от обычных записей и страниц. CPT удобно использовать для событий, портфолио, товаров, справочников и т.д. Это отдельная секция в админке, собственные URL-адреса и свои шаблоны вывода.

Коротко: CPT = отдельный «контейнер» контента с собственными метаданными и шаблонами.

Важно: для сложных задач по календарям и билетам лучше использовать готовые плагины (например, The Events Calendar). Этот материал — учебный пример создания CPT вручную.

Обложка: руководство по WordPress и пользовательским типам записей

Зачем создавать отдельный тип записей для событий?

  • Разделение логики: события отдельно от блога и страниц.
  • Отдельные архивы и URL: /events/ вместо смешивания в ленте блога.
  • Собственные поля (дата, место, цена) без загрязнения обычных записей.
  • Гибкость шаблонов: отдельные archive- и single-шаблоны.

Когда это не нужно: если у вас один-две записи и нет требований к фильтрации/архиву — проще использовать стандартные рубрики/метки.

Как зарегистрировать пользовательский тип записей (пример: Event)

Мы внесём код в functions.php темы или подключим через плагин для пользовательских функций. Если не хотите править тему — используйте плагин My Custom Functions:

https://en-gb.wordpress.org/plugins/my-custom-functions/

Откройте functions.php в папке темы (wp-content/themes/ваша-тема/functions.php) и добавьте в конец файла (до закрывающего тега ?>, если он есть) следующий код:

add_action('init', 'events_init');

function events_init() {
    $args = array(
        'labels' => array(
            'name' => __('Events'),
            'singular_name' => __('Event'),
        ),
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'events'),
        'supports' => array('thumbnail', 'editor', 'title', 'custom-fields')
    );

    register_post_type('events', $args);
}

Пояснения к ключевым опциям:

  • labels — подписи в интерфейсе; используйте функции локализации __() для переводов.
  • public — делает тип публичным (видимым на фронтэнде и в поиске).
  • has_archive — включает архив по адресу /events/.
  • rewrite => slug — часть URL, которую мы выбираем сами.
  • supports — какие элементы редактора включить (миниатюра, редактор, заголовок, произвольные поля).

После добавления кода и сохранения темы в админке появится пункт «Events» (или «События», если локализовать labels).

Админ-панель темы использует пользовательские типы записей для дополнительных функций

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

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

Как хранить дату события

Не используйте дату публикации поста для даты проведения — она показывает, когда объявление опубликовано. Для даты события заведите пользовательское поле, например date.

Создание пользовательского поля для даты проведения мероприятия

Рекомендации по формату даты:

  • Самый надёжный формат для парсинга — ISO: YYYY-MM-DD (например, 2025-12-23).
  • Для локализации и удобства редактора можно показывать поле в формате ДД.MM.ГГГГ, но при сохранении лучше конвертировать в YYYY-MM-DD.
  • Функция PHP strtotime корректно парсит ISO-формат везде; локализованные форматы могут вести себя непредсказуемо.

Если вы используете расширения типа ACF (Advanced Custom Fields), задайте поле даты как поле типа Date и храните в ISO.

Регистрация постоянных ссылок (Permalinks)

После добавления нового типа WordPress может выдавать 404 при просмотре постов/архива. Решение: зайдите в Настройки > Постоянные ссылки и нажмите «Сохранить изменения» — это заставит WordPress обновить правила перезаписи.

Создание шаблона архива: archive-events.php

Поскольку мы указали has_archive => true и slug => ‘events’, WordPress будет пытаться использовать шаблон archive-events.php для вывода архива. Скопируйте archive.php вашей темы и переименуйте копию в archive-events.php.

В шаблоне можно упростить вывод и взять из мета-поля date фактическую дату события вместо даты публикации. В примере ниже показан упрощённый каркас поста (вставьте в файл archive-events.php внутри цикла):

' . esc_html( date_i18n( get_option('date_format'), strtotime(get_post_meta(get_the_ID(), 'date', true)) ) ) . '
'; ?> ', '' ); ?>
"%s"'), get_the_title() ) ); ?>

Пояснение: мы используем date_i18n(get_option(‘date_format’), strtotime(…)) — это позволяет вывести дату в формате, заданном в настройках WordPress и с учётом локали сайта.

Страница архива с перечислением событий

После замены функции, заменяющей ссылку на время, на извлечение мета-поля даты, архив начнёт показывать дату события, а не дату публикации:

// Было: twentyseventeen_time_link()
// Стало:
echo esc_html( date_i18n( get_option('date_format'), strtotime( get_post_meta( get_the_ID(), 'date', true ) ) ) );

Архив событий с отображением дат

Альтернативные подходы и инструменты

Когда вручную писать CPT:

Когда выбрать плагин:

Отладка и типичные проблемы (когда «не работает»)

Практические рекомендации по дизайну и UX

Чек-листы по ролям

Разработчик:

Редактор/контент-менеджер:

Администратор сайта:

Мини-методология внедрения (SOP)

  1. План: определите поля и поведение (архив, фильтры, REST API).
  2. Реализация: зарегистрируйте CPT в теме/плагине.
  3. Шаблоны: создайте archive-events.php и single-events.php.
  4. Данные: добавьте несколько тестовых событий с датами в ISO.
  5. Тестирование: проверьте пермалинки, фильтры, локализацию дат и доступность.
  6. Релиз: обновите меню, очистите кеш, обучите редакторов.

Примеры запросов WP_Query для событий

$query = new WP_Query(array(
    'post_type' => 'events',
    'meta_key' => 'date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'date',
            'value' => date('Y-m-d'),
            'compare' => '>=',
            'type' => 'DATE'
        )
    )
));

Модель мышления и эвристики

Когда это не лучшая идея (контрпример)

Если у вас одностраничный сайт с 3–4 событиями в год, отдельный CPT и шаблоны могут быть избыточны. В таких случаях проще вести список на странице или использовать записи с метками.

Советы по безопасности и производительности

Куда двигаться дальше

Кстати: если вы недовольны текущим хостингом, можно рассмотреть managed WordPress-хостинг (например, WP Engine) или экономичный план от InMotion Hosting.

Критерии приёмки

Резюме

Создание пользовательского типа записи в WordPress даёт гибкость в организации контента: отдельные архивы, собственные поля и шаблоны. Для событий важно хранить дату в машинно-удобном формате (ISO), использовать date_i18n для вывода и не забывать обновлять постоянные ссылки. Альтернативы — готовые плагины и UI-инструменты — подходят, если нужна быстрая или продвинутая функциональность.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Заменить Блокнот в Windows на другой редактор
Windows

Заменить Блокнот в Windows на другой редактор

Добавление изображений в Google Формы
Гайды

Добавление изображений в Google Формы

Установка OTA на рутованный Android без потери root
Android.

Установка OTA на рутованный Android без потери root

Отключить лишние уведомления Shortcuts
Mobile

Отключить лишние уведомления Shortcuts

Установка Nessus на Kali Linux — пошагово
Кибербезопасность

Установка Nessus на Kali Linux — пошагово

Массовое удаление программ с IObit Uninstaller
Software

Массовое удаление программ с IObit Uninstaller