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

Создание пользовательского типа записи «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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

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

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство