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

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

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

Custom Post Type — это способ расширить стандартный функционал WordPress, добавив новый тип контента, отличный от постов и страниц. Например, если у вас сайт с каталогом фильмов, можно создать CPT "Фильмы" с уникальными полями и отдельной логикой.

Преимущества CPT:

  • Чёткое разделение контента по типам
  • Удобство управления и редактирования в админке
  • Возможность создания уникального шаблона вывода
  • Поддержка таксономий (категорий, меток) и произвольных полей

Использование CPT помогает не смешивать разные типы данных и делает сайт более организованным.

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

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

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

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'films'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
        'show_in_rest'       => true, // Для поддержки Gutenberg
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-format-video',
        'capability_type'    => 'post'
    );

    register_post_type('wptool_movie', $args);
}
add_action('init', 'wptool_register_cpt_movie');

Объяснение параметров:

  • labels — массив с локализованными названиями для интерфейса
  • public — делает тип видимым на сайте и в админке
  • has_archive — включает архивную страницу с URL /films/
  • rewrite — настраивает ЧПУ (человекопонятный URL)
  • supports — какие стандартные мета-поля поддерживает (заголовок, редактор и т.д.)
  • show_in_rest — нужна для поддержки редактора Gutenberg и REST API
  • menu_icon — иконка в админ-меню

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

Для организации и фильтрации контента CPT обычно дополняют таксономиями — категориями и тегами. Их можно создать с помощью register_taxonomy().

function wptool_register_taxonomies() {
    // Категории фильмов
    $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,
        'rewrite'           => array('slug' => 'film-genre'),
    );

    register_taxonomy('wptool_genre', 'wptool_movie', $args);
}
add_action('init', 'wptool_register_taxonomies');

Теперь в админке для фильмов можно указывать жанры и фильтровать по ним.

Вывод кастомного типа записей на фронтенде

Чтобы вывести список фильмов на сайте, можно создать кастомный шаблон архива archive-wptool_movie.php в папке темы, либо использовать WP_Query.

$args = array(
    'post_type' => 'wptool_movie',
    'posts_per_page' => 10,
    'tax_query' => array(
        array(
            'taxonomy' => 'wptool_genre',
            'field'    => 'slug',
            'terms'    => 'comedy', // пример фильтра по жанру
        ),
    ),
);
$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>';
    wp_reset_postdata();
} else {
    echo 'Фильмы не найдены';
}

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

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

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

  • Custom Post Type UI — популярный плагин для создания CPT и таксономий через интерфейс.
  • Advanced Custom Fields (ACF) — для добавления произвольных полей к CPT.
  • Clearfy Pro — для оптимизации и управления CPT и другими функциями WordPress.

Советы по организации и оптимизации CPT

При создании собственного типа записей важно придерживаться нескольких правил:

  • Используйте уникальные префиксы в названиях функций и типов (например, wptool_register_cpt_movie), чтобы избежать конфликтов с другими плагинами.
  • Подключайте поддержку REST API (show_in_rest = true) для совместимости с Gutenberg и внешними сервисами.
  • Правильно настраивайте права доступа и роли для управления CPT, если сайт с несколькими редакторами.
  • Используйте кастомные шаблоны для вывода CPT, чтобы контролировать дизайн и структуру.
  • Оптимизируйте запросы WP_Query, добавляя фильтры и пагинацию.

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

Автоматизация создания резервных копий WordPress с помощью PHP-кода
16.12.2025
Как создать свой плагин в WordPress с назначением и примерами кода
16.11.2025
Как создать собственный shortcode в WordPress с примером кода
10.11.2025
Как избежать проблем с отображением и обработкой AJAX в WooCommerce
18.05.2026
Автоматическое удаление старого контента в WordPress по типу постов и дате
14.03.2026