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

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

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

По умолчанию WordPress предоставляет два основных типа контента: посты (post) и страницы (page). Но если вы хотите организовать контент более гибко, например, выделить отдельный раздел с отзывами пользователей или каталогом проектов, стандартных типов не хватает.

Custom Post Type — это пользовательский тип контента, который регистрируется в системе и управляется так же, как стандартные записи. Они позволяют создавать отдельные разделы сайта с собственными настройками, метками и таксономиями.

Пример: если вы создаёте сайт агентства, можно сделать отдельный CPT «Проекты» для портфолио, чтобы не смешивать их с блогом.

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

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

Ниже пример простой функции для создания CPT «Отзывы»:

function wpdo_register_reviews_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' => 'reviews'),
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments'),
        'show_in_rest' => true // Для поддержки Gutenberg и REST API
    );

    register_post_type('wpdo_review', $args);
}
add_action('init', 'wpdo_register_reviews_cpt');

В этом примере мы создаём тип записей с названием wpdo_review, который в админке будет отображаться как «Отзывы». Он поддерживает заголовки, редактор, миниатюры, автора и комментарии.

Настройка отображения и таксономий для CPT

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

Например, добавим таксономию «Тип отзыва» для фильтрации:

function wpdo_register_reviews_taxonomy() {
    $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_admin_column' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'review-type'),
        'show_in_rest' => true
    );

    register_taxonomy('wpdo_review_type', array('wpdo_review'), $args);
}
add_action('init', 'wpdo_register_reviews_taxonomy');

Теперь у каждого отзыва можно будет выбрать тип, например, «Положительный», «Негативный» или «Нейтральный».

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

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

Пример простого цикла для вывода последних 5 отзывов:

$args = array(
    'post_type' => 'wpdo_review',
    'posts_per_page' => 5
);
$reviews_query = new WP_Query($args);

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

Этот код можно вставить в любой шаблон темы, чтобы вывести список отзывов.

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

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

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

Оба плагина поддерживают экспорт настроек в PHP, что позволяет потом перенести их в тему или собственный плагин.

Особенности и рекомендации при работе с CPT

При создании собственных типов записей стоит учитывать:

  • Уникальные имена для post_type, чтобы не конфликтовать с другими плагинами и темами.
  • Корректную регистрацию таксономий с параметром show_in_rest, если планируется работа с блоковым редактором Gutenberg.
  • Создание отдельных шаблонов для CPT: archive-{post_type}.php для архива и single-{post_type}.php для одиночных записей.
  • Оптимизацию запросов и использование кэширования для производительности.

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

Выводы и полезные ссылки

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

Для изучения темы рекомендуем официальную документацию WordPress: Регистрация пользовательских типов записей.

Как создать и использовать блок Gutenberg в WordPress с примером кода
18.03.2026
Как автоматизировать удалённые обновления в WordPress без плагинов
07.02.2026
Как удалить версию WordPress из HTML и REST API для повышения безопасности
11.04.2026
Как создать свой виджет для WordPress
25.11.2025
Как создать свой плагин WordPress с названием wpdo
01.11.2025