Как создать пользовательский тип записи в WordPress
Оглавление
- Как создать пользовательский тип записи в WordPress
- Как добавить фрагменты кода в WordPress с помощью WPCode
- Как отобразить пользовательский тип записи в меню и на сайте
- Когда не нужен пользовательский тип записи и альтернативы
- Контроль качества, тесты и критерии приёмки
- Чеклист ролей: разработчик, админ, контент-менеджер
- Безопасность, приватность и локализация
- Краткий глоссарий и часто задаваемые вопросы

В большинстве проектов стандартных типов записей WordPress (Записи, Страницы) достаточно. Но если контент структуры не вписывается в «посты» или «страницы» — стоит создать CPT. CPT помогает организовать контент, назначить отдельные шаблоны, таксономии и права доступа.
Как создать пользовательский тип записи в WordPress
Ниже — рабочий путь без ручного набора полного кода: используем генератор GenerateWP и вставляем код через сниппет-плагин.
Вкратце: генерация → вставка в WP → проверка меню и пермалинков → тесты прав доступа и отображения.
Шаг 1. Сгенерируйте код в GenerateWP
- Перейдите на страницу Post Type Generator сервиса GenerateWP и откройте вкладку General.

- Во вкладке General заполните основные поля:
- Function Name: имя функции регистрации CPT (латиницей, уникально).
- Child Theme: отмечайте, если код должен работать с дочерней темой.
- Text Domain: домен переводов для i18n.

- Нажимайте «Update Code» после каждого блока настроек — изменения применяются к генерируемому фрагменту.

- Во вкладке Post Type задайте ключ и метаданные CPT:
- Post Type Key: короткий ключ (латиница, без пробелов).
- Description: краткое описание назначения.
- Singular Name и Plural Name: названия для UI.
- Link to Taxonomies: привязки к таксономиям (категории, метки или свои).
- Hierarchical: включайте, если нужен иерархический тип (как страницы).

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

- В Options выбираются поддерживаемые поля (поддержка заголовков, редактора, миниатюр), экспорт, архивы и поведение в поиске.

- Visibility отвечает за видимость CPT в админке и REST API.

- Permalinks: при необходимости задайте кастомный slug и включите пагинацию для архива.

- Capabilities: управляют тем, какие роли и какие возможности имеют доступ к CPT. Здесь важно корректно разграничить права между администраторами, редакторами и автором.

- Скопируйте сгенерированный фрагмент кода.
Важно: не вставляйте код в тему, которую вы не контролируете. Лучше подключать CPT через плагин сайта или сниппет-плагин, чтобы код не потерялся при смене темы.
Как добавить фрагменты кода в WordPress с помощью WPCode
Мы используем WPCode, потому что он прост и безопасен для управления PHP-фрагментами.
- В админке WordPress установите и активируйте плагин WPCode.
- В меню появится пункт Code Snippets.
- Наведите на Code Snippets и нажмите + Add Snippet.

- Нажмите Use snippet под Add Your Custom Code (New Snippet).

- Включите переключатель Active, задайте название сниппета, выберите PHP Snippet как тип кода и вставьте сгенерированный код в поле.

- Нажмите Save Snippet. После активации CPT появится в левой боковой панели админки.

Совет: если сайт в продакшене, сначала протестируйте сниппет на staging-копии.
Как отобразить пользовательский тип записи в меню и на сайте
Если вы не видите ссылку на CPT в меню сайта — добавьте её вручную.
- В админке наведите на Внешний вид, затем Меню.

- Создайте новый пункт меню или редактируйте существующее меню.
- В разделе Добавить пункты меню выберите Пользовательские ссылки и вставьте URL-слуг (например /books), укажите текст ссылки и нажмите Добавить в меню.

- Выберите место отображения меню и сохраните.

После сохранения новый пункт меню появится на указанной позиции.
Примечание: если CPT настроен с поддержкой REST API и archive=true, можно вывести архивную страницу через шаблоны темы или через кастомный блок/шорткод.
Когда не нужен пользовательский тип записи и альтернативы
CPT — мощный инструмент, но он не всегда необходим. Рассмотрите альтернативы:
- Таксономии или метки: если разница между элементами минимальна, достаточно таксономии.
- Пользовательские поля (ACF): если нужно просто добавить поля к существующим записям.
- Формы и кастомные таблицы: для очень специфичных данных (платежи, логи) лучше отдельная таблица и API.
- Плагины генерации CPT: Custom Post Type UI и Pods позволяют управлять CPT без кода.
Контрпример: если вам нужно просто пометить публикации меткой «Рецепт», не стоит создавать новый CPT — используйте таксономию.
Контроль качества, тесты и критерии приёмки
Перед выпуском проверьте следующие пункты:
- В админке отображается меню CPT и его интерфейс рабочий.
- Страница архива выводится и доступна по ожидаемому URL.
- Отдельная запись открывается и использует нужный шаблон (single-{post_type}.php или шаблон темы).
- Права доступа: пользователи с ролью X могут создавать/редактировать/удалять, роль Y — нет.
- Пермалинки правильные и не конфликтуют с существующими URL.
- Экспорт/импорт: записи CPT корректно экспортируются через стандартный инструмент экспорта WordPress.
- SEO: архив и отдельные записи индексируются/нетиндексируются в соответствии с требованиями.
Критерии приёмки
- CPT успешно регистрируется и отображается в админке.
- CRUD (создание, чтение, обновление, удаление) работает для назначенных ролей.
- Шаблоны и стили корректно применяются в теме.
- Нет конфликтов пермалинков и дубликатов роутов.
Чеклист ролей
Разделённый по обязанностям чеклист поможет не пропустить важное.
Роль — разработчик
- Создать CPT как часть плагина сайта или в сниппете.
- Обеспечить i18n (text domain) и корректные labels.
- Зарегистрировать нужные таксономии и мета-поля.
- Настроить capabilities и map_meta_cap, если нужна тонкая настройка прав.
- Сделать unit/integration тесты (если CI).
Роль — администратор сайта
- Установить и активировать сниппет/плагин.
- Проверить видимость CPT и права доступа.
- Добавить пункт меню и настроить местоположение.
- Протестировать экспорт/импорт и резервное копирование.
Роль — контент-менеджер
- Создать несколько тестовых записей CPT.
- Проверить поля, превью, форматирование и отображение блоков.
- Передать обратную связь разработчику по UX в админке.
Безопасность, приватность и локализация
Безопасность
- Никогда не вставляйте ненадёжный PHP-код. Проверяйте код, полученный из внешних сервисов.
- Ограничьте возможности по созданию/удалению записей через capabilities.
- Включайте nonce и проверку прав там, где CPT взаимодействует с фронтендом (AJAX, формы).
Приватность и GDPR
- Если CPT хранит персональные данные (контакты, заявки) — убедитесь, что у вас есть политика хранения данных.
- Реализуйте экспорт/удаление персональных данных согласно требованиям GDPR и местного законодательства.
Локализация
- Используйте функции перевода __(), _e(), _x() с правильным text domain.
- Для русскоязычных сайтов проверьте падежи в метках и подсказках (Singular/Plural), чтобы интерфейс был читаем.
Тестовые сценарии и приёмо-сдаточные кейсы
- Создать запись CPT с минимальными полями — ожидание: запись сохраняется и отображается.
- Создать запись с расширенными метаполями — ожидание: все поля валидируются и сохраняются.
- Попытка создания записи пользователем без прав — ожидание: операция запрещена.
- Проверка пермалинков: перейти по URL архива и к отдельной записи — ожидание: 200 OK.
- SEO-поведение: проверить meta robots, canonical при необходимости.
Ментальные модели и рекомендации по архитектуре
- Модель «контент как ресурс»: думайте о каждом CPT как о REST-ресурсе с собственными полями и правилами доступа.
- «Разделение обязанностей»: данные, отображение и права отдельно — CPT для структуры данных, шаблоны темы для представления.
- «Минимализм в CPT»: создавайте CPT только когда семантика контента отличается принципиально.
Альтернативные подходы
- Custom Post Type UI: интерфейс для создания и управления CPT без кода.
- Pods: расширенный набор для CPT с дисплеями, связями и кастомными полями.
- ACF (Advanced Custom Fields): добавить поля к существующим записям вместо создания нового CPT.
Краткий глоссарий
- CPT: пользовательский тип записи (Custom Post Type).
- Slug: часть URL для записи или архива (напр. /books).
- Taxonomy: способ группировки контента (категории, метки или свои таксономии).
- Capabilities: права доступа ролей к CRUD-операциям.
Часто задаваемые вопросы
Как просмотреть доступные типы записей в теме?
Используйте плагин Find My Custom Post Types для визуального просмотра или функцию get_post_types() для получения списка зарегистрированных типов.
Сколько пользовательских типов записей можно создать?
Технически — сколько угодно. Практически стоит ограничивать количество для поддержки удобства администрации и производительности.
Есть ли плагин для генерации пользовательских типов записей?
Да. Custom Post Type UI — популярный бесплатный вариант. Также рекомендуются Pods и ACF (в связке с CPT).
Image credit: Pexels. All screenshots by Natalie dela Vega.
Похожие материалы
Как сделать PNG прозрачным — полное руководство
Исправить ошибку подключения Netflix в Windows 10
Google Maps на экране блокировки iPhone
Анонимный просмотр Instagram Stories
Запуск PowerShell через .bat: быстро и безопасно