Создание пользовательских типов записей в WordPress

Зачем нужны пользовательские типы записей
WordPress в базовой установке предоставляет записи, страницы, вложения и ревизии. Эти типы отлично подходят для блога и простых сайтов, но часто бизнес-логика требует специализированной структуры: каталоги, профили сотрудников, события, отзывы, товары и т.д. CPT позволяют организовать админку и фронтенд так, чтобы содержимое было семантически корректным и удобным в управлении.
Кратко: CPT — это способ сказать WordPress “это не обычная запись, это особый тип содержимого”. Это улучшает UX редакторов и упрощает отображение на сайте.
Основные подходы
- Плагин: быстро, удобно, не требует навыков PHP. Примеры: Pods, Custom Post Type UI, Custom Post Type Maker. Рекомендация: Pods — популярный и функциональный.
- Вручную: лучший вариант для оптимизации и контроля. Пишете код в functions.php или отдельном плагине и регистрируете CPT через register_post_type.
Важно: лишние плагины добавляют нагрузку. Если вы умеете работать с PHP, регистрируйте CPT вручную внутри дочерней темы или собственного плагина.
Быстрый пример: регистрируем CPT вручную
Ниже — код, который добавляет кастомный тип “partner” (партнёры). Вставьте его в конец файла темы functions.php (Внешний вид > Редактор темы > Функции темы).
`/*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”. Архив будет доступен по адресу: yoursite.com/partners/. Если страница возвращает 404 — зайдите в Настройки > Постоянные ссылки и сохраните настройки снова.
Что можно и чего стоит избегать
- Когда не нужен CPT: если данные — просто метаданные записи (например, дополнительное поле у статьи) или вариация страниц, лучше использовать пользовательские поля (ACF), таксономии или шаблоны страниц.
- CPT оправдан: отдельные сущности с собственным набором полей, отдельной архивацией и логикой отображения.
Альтернативы и их плюсы/минусы
- Таксономии: хороши для классификации (категории, теги). Не подходят для сущностей с множеством полей.
- Пользовательские поля (meta): быстрый способ расширить существующую запись, но админка может стать неструктурированной.
- WooCommerce/плагин-каталоги: если цель — интернет-магазин или сложный каталог, используйте специализированные решения.
Ментальные модели и хорошие практики
- Модель “Сущность 7 полей”: если у объекта >5-6 специфических полей и своя логика отображения — это кандидат на CPT.
- Разделяйте данные и представление: храните структуру в CPT и отображение реализуйте в шаблонах single-{posttype}.php и archive-{posttype}.php.
- Делайте CPT в виде отдельного плагина при возможности — при смене темы данные сохранятся и не зависят от темы.
Чеклист перед публикацией CPT (роль: разработчик)
- Зарегистрирован post_type с корректным slug и supports.
- Локализованы строки (если нужно) или адаптированы для целевой аудитории.
- Добавлены шаблоны single-{posttype}.php и archive-{posttype}.php.
- Прописаны rewrite правила и проверены постоянные ссылки.
- Написаны тесты/проверки отображения и доступа прав пользователей.
- Протестировано на мобильных устройствах и с учетом SEO (schema, meta).
Критерии приёмки
- CPT отображается в админке и имеет рабочую форму создания/редактирования.
- Архив и отдельная запись открываются без 404.
- Поля и метаданные сохраняются и доступны через WP_Query.
- Права доступа корректны (роль редактора/автора могут добавлять/редактировать записи CPT).
Отладка и частые проблемы
- 404 на архиве: зайдите в Настройки > Постоянные ссылки и нажмите “Сохранить”.
- CPT не появляется в меню: проверьте register_post_type и аргумент ‘public’ => true.
- Страницы возвращают 403 или неверные права: проверьте capability_type и map_meta_cap.
Примечание: для больших проектов регистрируйте CPT внутри собственного плагина, а не в functions.php темы.
Мини-методология внедрения (шаги)
- Оцените: нужен ли CPT или достаточно таксономии/полей.
- Спроектируйте поля и UX для редакторов.
- Зарегистрируйте CPT (в плагине или functions.php).
- Создайте шаблоны фронтенда и добавьте поддержку таксономий/фильтров.
- Протестируйте пермалинки, права и SEO.
- Документируйте для контент-менеджеров.
Примеры отказа (когда CPT не решит задачу)
- Нужна просто дополнительная информация к посту (например, дата съёмки для галереи) — лучше custom fields.
- Если объект должен иметь разную структуру у каждой записи и не повторяет общую схему — возможно, нужен другой подход (например, гибкая система блоков).
Decision flow (когда использовать CPT)
flowchart TD
A[Новая сущность нужна?] --> B{Есть ли >5 полей и своя логика отображения?}
B -- Да --> C[Использовать CPT]
B -- Нет --> D[Использовать таксономию или custom fields]
C --> E{Нужна интеграция с темой?}
E -- Да --> F[Создать плагин CPT + шаблоны в теме]
E -- Нет --> G[Добавить CPT в тему]Тесты и приёмка (варианты тест-кейсов)
- Создание новой записи CPT сохраняет все поля.
- Запись доступна публично при ‘public’ => true.
- Формы редактора отображают thumbnail, excerpt, custom fields при включённых supports.
- Права роли редактора/автора ограничены корректно.
Короткое резюме
Пользовательские типы записей — мощный инструмент структурирования данных в WordPress. Для быстрого запуска используйте плагины, для контроля и скорости — регистрируйте CPT вручную через register_post_type. Всегда тестируйте пермалинки и продумывайте UX админки. Если сомневаетесь — спроектируйте минимально необходимую структуру и начните с прототипа.
Важное: при переносе CPT между сайтами сохраняйте и экспортируйте связанные таксономии и метаполя, чтобы не потерять данные.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone