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

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

5 min read WordPress Обновлено 31 Dec 2025
Пользовательские типы записей WordPress — создание
Пользовательские типы записей WordPress — создание

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 темы.

Мини-методология внедрения (шаги)

  1. Оцените: нужен ли CPT или достаточно таксономии/полей.
  2. Спроектируйте поля и UX для редакторов.
  3. Зарегистрируйте CPT (в плагине или functions.php).
  4. Создайте шаблоны фронтенда и добавьте поддержку таксономий/фильтров.
  5. Протестируйте пермалинки, права и SEO.
  6. Документируйте для контент-менеджеров.

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

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

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство