Новый тип записи нужен, когда сущность отличается от обычной статьи: например, кейс, объект, специалист или вакансия. Для простого дополнительного поля CPT не обязателен. Ниже — минимальный демонстрационный вариант в отдельном плагине, а не в functions.php темы.
Когда нужен CPT
- У объектов есть самостоятельные страницы и собственный список.
- Для них нужны отдельные поля или таксономии.
- Контент должен сохраняться при смене темы.
Если нужно лишь сгруппировать обычные публикации, сначала рассмотрите рубрики и метки WordPress.
Минимальная регистрация через register_post_type
Создайте локально файл wp-content/plugins/demo-case-studies/demo-case-studies.php и добавьте код:
<?php
/**
* Plugin Name: Demo Case Studies
* Description: CPT «Кейсы» для демонстрации.
* Version: 0.1.0
*/
if (!defined('ABSPATH')) exit;
add_action('init', function () {
register_post_type('case_study', [
'labels' => [
'name' => 'Кейсы',
'singular_name' => 'Кейс',
],
'public' => true,
'show_in_rest' => true,
'has_archive' => true,
'rewrite' => ['slug' => 'cases'],
'supports' => ['title', 'editor', 'thumbnail', 'excerpt'],
'menu_icon' => 'dashicons-portfolio',
]);
});
Это пример для тестовой среды. Он не задаёт дополнительные роли, кастомные capability или импорт данных. При разработке продукта сначала опишите, кто будет создавать, менять и читать записи.
Как включить и проверить
- Сделайте резервную копию или работайте на staging.
- Разместите папку с PHP-файлом в
wp-content/plugins/. - Активируйте «Demo Case Studies» в админке.
- Откройте раздел Кейсы и создайте пробную запись.
- Проверьте архив
/cases/и отдельную страницу кейса. Если адрес не открывается, пересохраните Настройки → Постоянные ссылки без изменения структуры. - Проверьте, что Gutenberg открывается: за это отвечает
show_in_rest => true.
Что делают ключевые параметры
public: доступность типа записи на сайте.show_in_rest: регистрация REST-интерфейса и поддержка редактора блоков.has_archive: архив записей, если нужен общий каталог.rewrite: собственная часть URL; существующие slug нельзя менять без планирования редиректов.supports: стандартные поля редактирования.
Типичные ошибки
Есть пункт в админке, но URL возвращает 404
Проверьте rewrite, наличие конфликта со страницей или другим CPT и сохраните постоянные ссылки. Не добавляйте произвольные rewrite-правила поверх этого примера без понимания конфликта.
CPT случайно стал доступен всем
Параметр public описывает публичность контента; это не полная модель редакторских полномочий. Для внутренних сущностей проектируйте capabilities, map_meta_cap и API-авторизацию отдельно.
CPT исчез после смены темы
Регистрация должна жить в отдельном плагине: тип контента — предметная модель, а не оформление.
Что сделать дальше
При необходимости добавьте таксономии (register_taxonomy), метаданные с явной схемой и show_in_rest, проверки прав и шаблоны списка/детальной страницы. До релиза протестируйте новый тип записи на пустой базе и на сайте с существующими URL.
См. официальную справку по register_post_type и REST API для пользовательских типов.
Источник: https://developer.wordpress.org/reference/functions/register_post_type/
Материал был полезен?
Помогите нам сделать материалы точнее и понятнее.