ворд-пресс.рф
Разработка

Custom Post Types в WordPress: создаём тип записи правильно

Пошаговое создание CPT в плагине: register_post_type, права, show_in_rest, архив и SEO.

Новый тип записи нужен, когда сущность отличается от обычной статьи: например, кейс, объект, специалист или вакансия. Для простого дополнительного поля 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 или импорт данных. При разработке продукта сначала опишите, кто будет создавать, менять и читать записи.

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

  1. Сделайте резервную копию или работайте на staging.
  2. Разместите папку с PHP-файлом в wp-content/plugins/.
  3. Активируйте «Demo Case Studies» в админке.
  4. Откройте раздел Кейсы и создайте пробную запись.
  5. Проверьте архив /cases/ и отдельную страницу кейса. Если адрес не открывается, пересохраните Настройки → Постоянные ссылки без изменения структуры.
  6. Проверьте, что 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/

Материал был полезен?

Помогите нам сделать материалы точнее и понятнее.