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

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

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

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

Например, если вы ведёте сайт о фильмах, можно создать CPT «Фильмы» с кастомным набором полей и таксономий, отдельным меню в админке и индивидуальным шаблоном вывода.

Регистрация собственного типа записи в WordPress

Для регистрации CPT используется функция register_post_type(). Лучше всего добавлять регистрацию в файл темы functions.php или в отдельный плагин.

Рассмотрим пример регистрации CPT «Портфолио» с базовыми настройками:

function wpconfig_register_portfolio_cpt() {
    $labels = array(
        'name'               => 'Портфолио',
        'singular_name'      => 'Портфолио',
        'add_new'            => 'Добавить работу',
        'add_new_item'       => 'Добавить новую работу',
        'edit_item'          => 'Редактировать работу',
        'new_item'           => 'Новая работа',
        '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,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
        'taxonomies'         => array('category', 'post_tag'),
    );

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

В данном коде мы задали название, описание, включили поддержку редактора, миниатюр и отрывков, а также включили REST API для Gutenberg и других приложений.

Дополнительные возможности и настройка Custom Post Type

Полезно знать, что у CPT можно добавить собственные таксономии (категории и метки), кастомные поля и метабоксы. Для таксономий используется функция register_taxonomy(). Рассмотрим добавление таксономии «Тип работы» для портфолио:

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

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_in_rest'      => true,
        'rewrite'           => array('slug' => 'work-type'),
    );

    register_taxonomy('work_type', array('portfolio'), $args);
}
add_action('init', 'wpconfig_register_work_type_taxonomy');

Таксономия будет доступна в админке и на фронтенде для фильтрации и сортировки.

Вывод Custom Post Type на сайте с использованием WP_Query

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

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

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

Такой код можно вставить в шаблон темы, шорткод или виджет.

Полезные плагины для работы с Custom Post Types

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

  • Toolset Types — мощный инструмент для создания CPT, таксономий и кастомных полей.
  • Advanced Custom Fields Pro — для создания удобных и мощных полей для CPT.
  • Custom Post Type UI — простой интерфейс для регистрации CPT и таксономий без кода.

Советы по работе с Custom Post Types

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

Не забудьте настроить права доступа, если нужно ограничить возможность добавления или редактирования для определённых ролей.

Для SEO рекомендуется создать отдельные шаблоны для CPT (single-{post_type}.php, archive-{post_type}.php) и правильно настроить мета-теги.

Также стоит учитывать, что при смене темы или отключении плагина с кодом CPT записи не будут отображаться, поэтому лучше хранить код CPT в отдельном плагине или child-теме.

Как настроить логирование ошибок в WordPress для разработчиков
30.11.2025
Как удалить виджеты из сайдбара в WordPress: практическое руководство
11.01.2026
Как создать собственный REST API endpoint в WordPress: подробное руководство
08.11.2025
Как настроить ответ на AJAX-запросы в WordPress: практическое руководство с примерами кода
02.02.2026
Как создать собственный тип записи (Custom Post Type) в WordPress с примерами кода
14.01.2026