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

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

Что такое собственный тип записи и зачем он нужен

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

  • Разграничить контент по логическим блокам;
  • Настроить отдельные шаблоны отображения;
  • Добавить новые метаполя и таксономии;
  • Упростить управление контентом в админке.

При правильной реализации CPT можно легко интегрировать с SEO-плагинами, фильтрами и другими инструментами.

Регистрация собственного типа записи с помощью кода

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

Пример функции регистрации CPT «Кейсы»

function wordpressy_register_cpt_cases() {
    $labels = array(
        'name'               => 'Кейсы',
        'singular_name'      => 'Кейс',
        'menu_name'          => 'Кейсы',
        'name_admin_bar'     => 'Кейс',
        'add_new'            => 'Добавить кейс',
        'add_new_item'       => 'Добавить новый кейс',
        'edit_item'          => 'Редактировать кейс',
        'new_item'           => 'Новый кейс',
        'view_item'          => 'Просмотреть кейс',
        'search_items'       => 'Искать кейсы',
        'not_found'          => 'Кейсы не найдены',
        'not_found_in_trash' => 'В корзине кейсы не найдены',
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'menu_icon'          => 'dashicons-portfolio',
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest'       => true,
        'rewrite'            => array('slug' => 'cases'),
    );
    register_post_type('wordpressy_cases', $args);
}
add_action('init', 'wordpressy_register_cpt_cases');

В этом примере мы создали CPT с названием «wordpressy_cases», который поддерживает заголовок, редактор, миниатюры и пользовательские поля. Параметр show_in_rest включён для поддержки Gutenberg и REST API.

Настройка пользовательских таксономий для CPT

Для удобной организации записей типа кейсы можно добавить собственные таксономии — категории или теги. Это позволит фильтровать и группировать контент внутри CPT.

Пример регистрации таксономии «Тип кейса»

function wordpressy_register_taxonomy_case_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,
        'rewrite'           => array('slug' => 'case-type'),
    );
    register_taxonomy('wordpressy_case_type', 'wordpressy_cases', $args);
}
add_action('init', 'wordpressy_register_taxonomy_case_type');

Теперь в админке появится новая таксономия для типа записей кейсы, позволяющая лучше структурировать информацию.

Отображение CPT на сайте: шаблоны и вывод данных

Чтобы выводить собственные типы записей на сайте, нужны отдельные шаблоны в вашей теме. WordPress ищет файлы шаблонов по иерархии:

  • single-{post_type}.php — для одиночной записи CPT;
  • archive-{post_type}.php — для страницы архива CPT.

Если таких файлов нет, WordPress будет использовать single.php или archive.php. Рекомендуется создавать отдельные шаблоны для кастомных типов.

Пример простого шаблона single-wordpressy_cases.php

<?php
get_header();
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="case-content"><?php the_content(); ?></div>
<?php
endwhile; endif;
get_footer();
?>

Плагины для работы с CPT и расширением функционала

Если вы предпочитаете не писать код, есть удобные плагины для создания и управления CPT:

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

Эти плагины помогут упростить работу, особенно если вы не хотите углубляться в детали кода.

Пользовательские функции и хуки для расширения CPT

После регистрации CPT можно создавать кастомные функции для выборки и вывода данных. Для примера — функция для получения последних 5 кейсов:

function wordpressy_get_latest_cases($number = 5) {
    $args = array(
        'post_type'      => 'wordpressy_cases',
        'posts_per_page' => $number,
        'post_status'    => 'publish',
    );
    $query = new WP_Query($args);
    return $query;
}

Использовать её можно так:

$cases = wordpressy_get_latest_cases();
if ($cases->have_posts()) {
    while ($cases->have_posts()) {
        $cases->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_excerpt() . '</div>';
    }
    wp_reset_postdata();
}

Также можно использовать хуки manage_edit-{post_type}_columns и manage_{post_type}_posts_custom_column для добавления и настройки колонок в админке.

SEO и пермалинки для CPT

Для правильной индексации важно настроить ЧПУ (человеко-понятные URL). В параметре rewrite при регистрации CPT задайте удобный слаг. Например, 'slug' => 'cases'. После регистрации CPT необходимо обновить настройки постоянных ссылок в админке — перейти в «Настройки» > «Постоянные ссылки» и нажать «Сохранить изменения».

Для SEO-поддержки CPT совместимы с большинством популярных плагинов, например Rank Math или Yoast SEO, которые автоматически добавляют поддержку CPT.

Важные советы и рекомендации по работе с CPT

  • Выбирайте уникальный идентификатор для CPT, чтобы не было конфликтов с другими плагинами или темами.
  • Используйте show_in_rest = true, чтобы обеспечить поддержку блокового редактора и REST API.
  • Добавляйте поддержку миниатюр и пользовательских полей для расширения контента.
  • Регулярно проверяйте совместимость CPT с обновлениями WordPress и плагинов.
  • При необходимости используйте плагины для упрощения создания и управления CPT, особенно если не хотите писать много кода.

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

Как создать динамические поля в WordPress без плагинов
26.03.2026
Как использовать WPStories для создания интерактивных историй в WordPress
08.03.2026
Как использовать куки для авторизации в WordPress
09.02.2026
Как использовать WP REST API для автоматического обновления товаров WooCommerce
01.05.2026
Как использовать Gutenberg блоки для создания комплексного контента в WordPress
24.02.2026