Как создать собственный тип записи (Custom Post Type) в WordPress с примерами кода

Custom Post Types (CPT) — это мощный инструмент WordPress, позволяющий расширить стандартный функционал сайта и создать уникальные виды контента, отличные от обычных записей и страниц. В этой статье мы подробно разберем, как правильно создать и настроить собственный тип записи с примерами кода, а также обсудим нюансы, которые помогут избежать распространенных ошибок.

Что такое Custom Post Type и зачем он нужен

В WordPress по умолчанию есть несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и несколько системных типов. Но часто для проектов требуется специализированный тип контента — например, для портфолио, отзывов, товаров или мероприятий. Создав собственный тип записи, вы сможете удобно управлять таким контентом, выделить его в админке, добавить уникальные поля и так далее.

Преимущества использования CPT:

  • Отделение контента по смыслу и структуре.
  • Удобство администрирования благодаря отдельному меню.
  • Возможность добавлять уникальные метаданные и таксономии.
  • Гибкость в выводе на фронтенде.

Регистрация собственного типа записи — базовый пример

Для регистрации CPT используется функция register_post_type(), которую нужно вызвать, например, в хуке init. Вот простой пример создания типа записи portfolio:

function wpdir_register_post_type_portfolio() {
    $labels = array(
        'name'               => 'Портфолио',
        'singular_name'      => 'Портфолио',
        'add_new'            => 'Добавить работу',
        'add_new_item'       => 'Добавить новую работу',
        'edit_item'          => 'Редактировать работу',
        'new_item'           => 'Новая работа',
        'all_items'          => 'Все работы',
        'view_item'          => 'Просмотреть работу',
        'search_items'       => 'Искать работы',
        'not_found'          => 'Работы не найдены',
        'not_found_in_trash' => 'В корзине работы не найдены',
        'menu_name'          => 'Портфолио'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'portfolio'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt'),
        'show_in_rest'       => true, // поддержка Gutenberg
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
    );

    register_post_type('portfolio', $args);
}
add_action('init', 'wpdir_register_post_type_portfolio');

Этот код создаст в админке новый пункт меню «Портфолио» с возможностью добавлять и редактировать записи этого типа. Включена поддержка миниатюр и редактора Gutenberg.

Основные параметры при регистрации CPT

Разберем ключевые параметры массива $args:

  • public — делает тип записи доступным и в админке, и на сайте.
  • has_archive — включает архив этого типа по адресу /portfolio/.
  • rewrite — настраивает человекопонятные URL. Здесь важно указывать уникальный слаг.
  • supports — указывает, какие возможности редактора будут доступны (заголовок, редактор, миниатюры, эксцерты, комментарии и т.п.).
  • show_in_rest — если включено, CPT поддерживает редактор Gutenberg и REST API.
  • menu_position — позиция пункта меню в админке.
  • menu_icon — иконка пункта меню (Dashicons или URL картинки).

Правильная настройка этих параметров позволяет сделать CPT удобным как для пользователя, так и для разработчика.

Добавление собственной таксономии для типа записи

Часто требуется создавать не только собственный тип записи, но и уникальные таксономии (категории, метки) для него. Например, для портфолио можно добавить таксономию project_type.

function wpdir_register_taxonomy_project_type() {
    $labels = array(
        'name'              => 'Типы проектов',
        'singular_name'     => 'Тип проекта',
        'search_items'      => 'Искать типы проектов',
        'all_items'         => 'Все типы проектов',
        'edit_item'         => 'Редактировать тип проекта',
        'add_new_item'      => 'Добавить новый тип проекта',
        'menu_name'         => 'Типы проектов',
    );

    $args = array(
        'hierarchical'      => true, // как категории
        'labels'            => $labels,
        'show_ui'           => true,
        'show_in_rest'      => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'project-type'),
    );

    register_taxonomy('project_type', array('portfolio'), $args);
}
add_action('init', 'wpdir_register_taxonomy_project_type');

Теперь в админке у записей типа «Портфолио» появится отдельный блок для управления типами проектов.

Вывод записей собственного типа на сайте

Чтобы вывести записи CPT на фронтенде, можно использовать классический WP_Query. Пример вывода 5 последних работ портфолио:

$args = array(
    'post_type'      => 'portfolio',
    'posts_per_page' => 5,
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
} else {
    echo 'Работы не найдены';
}
wp_reset_postdata();

Такой код можно вставить в шаблон темы, чтобы гибко управлять выводом. При необходимости можно добавить фильтрацию по таксономиям.

Использование плагинов для создания Custom Post Types

Если вы предпочитаете не писать код вручную, можно воспользоваться плагинами. Например:

  • Custom Post Type UI — удобный интерфейс для создания CPT и таксономий.
  • Toolset Types — более продвинутый набор инструментов для создания и настройки типов записей.

Однако знание ручной регистрации CPT полезно для более точной настройки и отладки.

Особенности и советы при создании Custom Post Types

При работе с CPT важно учитывать несколько моментов:

  • Всегда используйте префиксы в названиях функций и слагов, чтобы избежать конфликтов (например, wpdir_).
  • Если вы меняете параметры CPT (например, rewrite), не забывайте обновлять правила перезаписи, вызвав flush_rewrite_rules() один раз, например, при активации плагина.
  • Подумайте о SEO: корректный слаг и поддержка ЧПУ помогут улучшить индексацию.
  • Для сложных типов записей добавляйте метабоксы и настраиваемые поля с помощью функций add_meta_box или плагинов Advanced Custom Fields.
  • Учитывайте поддержку REST API, если планируете интеграции или использовать Gutenberg.

Заключение по теме Custom Post Types

Создание собственного типа записи — один из базовых, но важных навыков разработки на WordPress. Это позволяет структурировать контент, улучшить управление сайтом и расширить функционал без излишних костылей. Освоив регистрацию CPT, вы сможете легко адаптировать любой проект под конкретные задачи.

Если хотите углубиться в тему, рекомендую изучить документацию WordPress по register_post_type() и экспериментировать с параметрами.

WooCommerce: автоматическое удаление неактивных товаров по дате последнего изменения
02.06.2026
WooCommerce: автоматическая очистка корзины после успешной оплаты
10.05.2026
Как удалить или заблокировать доступ по IP в WordPress
25.02.2026
Как автоматизировать сборку данных с помощью AJAX в WordPress
04.04.2026
Автоматизация создания резервных копий в WordPress: плагины и кодовые решения
14.01.2026