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

Как создать кастомные типы записей в WordPress

5 min read WordPress Обновлено 02 Apr 2026
Кастомные типы записей в WordPress
Кастомные типы записей в WordPress

Экран ноутбука с интерфейсом WordPress

Что такое кастомные типы записей и зачем они нужны

Кастомный тип записей (custom post type, CPT) — это способ хранить в WordPress не только статьи и страницы, но и любые сущности: товары, события, портфолио, профили сотрудников и прочее. Каждому CPT можно задать собственные поля, таксономии и шаблоны отображения.

Краткое определение: CPT — это сгруппированная логика контента с отдельной админ-меню и URL-архивом.

Важно: CPT не заменяет плагины, но расширяет архитектуру сайта и делает контент более структурированным.

Основные варианты создания CPT

  • Плагин — быстро, удобно, подходит для редакторов и непрофессионалов.
  • Ручной код — гибко, меньше сторонних зависимостей и потенциального «блоата».

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

  • Нужно быстрое решение или GUI для полей и таксономий.
  • Вы не хотите редактировать темы/child-тему.

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

  • Требуется тонкая интеграция с шаблонами и производительностью.
  • Вы хотите хранить логику в контролируемом коде (темы/плагин собственной разработки).

Примеры плагинов: Pods (рекомендуется — более 100 000 установок), Custom Post Type UI, Custom Post Type Maker.

Пошаговый SOP: создать CPT вручную (рекомендуется для разработчиков)

  1. Создайте дочернюю тему или собственный плагин для пользовательского кода. Никогда не правьте родную тему напрямую.
  2. Откройте файл functions.php дочерней темы или основного плагина.
  3. Скопируйте и вставьте код регистрации CPT (пример ниже).
  4. Сохраните файл и обновите админку WordPress.
  5. Если при переходе на архив CPT возникает 404, зайдите в Настройки → Постоянные ссылки и нажмите «Сохранить изменения» для сброса правил перезаписи.

Ниже — готовый код для CPT «partners» (партнёры):

/*Custom Post type start*/  
  
function cp_post_type_partners() {  
  
$supports = array(  
  
'title', // post title  
  
'editor', // post content  
  
'author', // post author  
  
'thumbnail', // featured images  
  
'excerpt', // post excerpt  
  
'custom-fields', // custom fields  
  
'comments', // post comments  
  
'revisions', // post revisions  
  
'post-formats', // post formats  
  
);  
  
  
  
$labels = array(  
  
'name' => _x('partners', 'plural'),  
  
'singular_name' => _x('partner', 'singular'),  
  
'menu_name' => _x('partners', 'admin menu'),  
  
'name_admin_bar' => _x('partners', 'admin bar'),  
  
'add_new' => _x('Add New', 'add new'),  
  
'add_new_item' => __('Add New partner'),  
  
'new_item' => __('New partner'),  
  
'edit_item' => __('Edit partner'),  
  
'view_item' => __('View partner'),  
  
'all_items' => __('All partners'),  
  
'search_items' => __('Search partners'),  
  
'not_found' => __('No partner found.'),  
  
);  
  
  
$args = array(  
  
'supports' => $supports,  
  
'labels' => $labels,  
  
'public' => true,  
  
'query_var' => true,  
  
'rewrite' => array('slug' => 'partners'),  
  
'has_archive' => true,  
  
'hierarchical' => false,  
  
);  
register_post_type('partner', $args);  
}  
add_action('init', 'cp_post_type_partners');  
/*Custom Post type end*/  

Этот код регистрирует новый тип записей с архивом по адресу /partners/.

Как проверить и отладить

  • После сохранения кода посмотрите в админ-панели — должен появиться пункт меню «Partners».
  • Для доступа к архиву откройте yoursite.com/partners/.
  • При 404: зайдите в Настройки → Постоянные ссылки и сохраните (сброс правил перезаписи).
  • Если CPT не появляется в меню, проверьте ошибки PHP в логах сервера и отключите плагины, конфликтующие с хуками.

Важно: используйте WP_DEBUG и журнал ошибок при разработке.

Сравнение: плагин vs ручной код (краткая матрица)

  • Скорость разработки: плагин > код
  • Контроль версий: код > плагин
  • Производительность: код > плагин
  • Удобство для редакторов: плагин > код

Ментальные модели и эвристики при выборе архитектуры

  • Если контент — продукт вашей бизнес-логики (например, каталог товара), лучше кодировать CPT и связанные метаполя.
  • Если важна скорость запуска и не требуется тонкая кастомизация — используйте Pods или CPT UI.
  • Держите логику отображения (templates) отдельно от регистрации типа записей.

Ролевые чеклисты

Для разработчика

  • Создать child-тему или плагин
  • Зарегистрировать CPT через register_post_type
  • Зарегистрировать таксономии и метаполя (если нужно)
  • Написать шаблон archive-{post_type}.php и single-{post_type}.php
  • Написать миграцию при изменениях slug/labels

Для контент-редактора

  • Создать тестовую запись CPT
  • Проверить поля и метаданные
  • Убедиться, что отображение соответствует требованиям дизайна

Для владельца сайта

  • Решить, нужен ли плагин или код
  • Установить резервное копирование перед внесением изменений
  • Провести нагрузочное тестирование при большом количестве записей

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

  • Новый пункт меню появился в админке
  • Можно создать, редактировать и удалить запись CPT
  • Архив и одиночная запись отображаются корректно в теме
  • Нет 404 после обновления пермалинков

Тест-кейсы и приёмочные сценарии

  • Создать запись с изображением и пользовательскими полями — данные сохраняются
  • Создать несколько записей и проверить пагинацию архива
  • Поменять slug и проверить, что старые URL либо перенаправляются, либо выдаётся 404 с осмысленным сообщением

Отладочный план и откат изменений

  1. Перед изменением — сделать бэкап файлов и базы данных.
  2. В случае ошибки — вернуть предыдущий файл functions.php или деактивировать пользовательский плагин.
  3. Если после изменения slug появились битые ссылки — восстановить старый slug или настроить 301-редиректы.

Примечание: простой способ отката — переименовать функцию регистрации CPT или отключить add_action(‘init’, …).

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

  • Advanced Custom Fields (ACF) для удобной работы с метаполями
  • WP REST API: открыть CPT для внешних приложений
  • Использовать кастомный плагин вместо functions.php для лучшей переносимости и контроля версий

Пример простого потока принятия решения (Mermaid)

flowchart TD
  A[Нужен новый тип контента?] -->|Да| B{Требуется UI для полей?}
  B -->|Да| C[Используем Pods/ACF]
  B -->|Нет| D[Регистрируем CPT в коде]
  A -->|Нет| E[Оставляем стандартные типы]

Короткий чек-лист по безопасности и производительности

  • Не храните чувствительные данные в метаполях без шифрования
  • Ограничьте количество кастомных запросов на странице (WP_Query с пагинацией)
  • Индексируйте часто используемые метаполя только при необходимости

Финальные советы и лучшие практики

  • Всегда работайте в дочерней теме или в собственном плагине.
  • Разделяйте регистрацию CPT и логику отображения: register_post_type в одном файле, шаблоны — в теме.
  • Используйте локализуемые строки в labels, даже если сайт на одном языке.
  • Документируйте изменения и версионируйте код.

Краткое резюме

Кастомные типы записей — это мощный инструмент для структурирования контента в WordPress. Для быстрого запуска используйте Pods или аналоги; если важны производительность и контроль — регистрируйте CPT вручную через functions.php и register_post_type. В статье приведён рабочий пример кода, пошаговый SOP, чеклисты для ролей и тест-кейсы, которые помогут внедрить CPT безопасно и прогнозируемо.

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

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

Менеджер паролей на Android — настройка и автозаполнение
Безопасность

Менеджер паролей на Android — настройка и автозаполнение

Телемедицина: как подготовиться и оставаться в безопасности
Телемедицина

Телемедицина: как подготовиться и оставаться в безопасности

Научно обоснованные советы по продуктивности
Продуктивность

Научно обоснованные советы по продуктивности

Перенос лицензии Windows 10 на новый ПК
Windows

Перенос лицензии Windows 10 на новый ПК

NFT как аватар в Twitter — как настроить
Социальные сети

NFT как аватар в Twitter — как настроить

ChatGPT как личный помощник
Продуктивность

ChatGPT как личный помощник