Как создать собственный тип записи в WordPress

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

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

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

С помощью CPT можно:

  • организовать контент более логично и удобно;
  • создавать отдельные архивы и страницы для разных типов данных;
  • настраивать отображение и функциональность для каждого типа отдельно;
  • управлять доступом и правами для разных типов записей.

Для разработки на wponline.ru мы рассмотрим, как программно зарегистрировать собственный тип записи и какие есть удобные плагины для этого.

Регистрация собственного типа записи через functions.php: пример кода

Самый простой способ — добавить функцию регистрации CPT в файл functions.php вашей темы или в отдельный плагин. Используйте хук init для регистрации.

function wponline_register_cpt_movie() {
    $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' => 'films'),
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'show_in_rest' => true,
    );

    register_post_type('wponline_movie', $args);
}
add_action('init', 'wponline_register_cpt_movie');

Этот код создаст новый тип записи «Фильм» с поддержкой заголовка, текста, миниатюры и пользовательских полей, а также включит поддержку REST API. Благодаря параметру 'rewrite' архив будет доступен по адресу site.ru/films/.

Пояснения к параметрам

В массиве $args вы определяете, как будет работать CPT. Параметр 'public' => true делает тип записи доступным в админке и на фронтенде. 'has_archive' => true создаёт архивную страницу. 'show_in_rest' => true важно для совместимости с новым редактором Gutenberg и REST API.

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

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

function wponline_register_taxonomies_for_movie() {
    register_taxonomy('wponline_genre', 'wponline_movie', array(
        'labels' => array(
            'name' => 'Жанры',
            'singular_name' => 'Жанр',
            'search_items' => 'Поиск жанров',
            'all_items' => 'Все жанры',
            'edit_item' => 'Редактировать жанр',
            'add_new_item' => 'Добавить новый жанр',
            'menu_name' => 'Жанры',
        ),
        'hierarchical' => true,
        'show_in_rest' => true,
        'rewrite' => array('slug' => 'genre'),
    ));

    register_taxonomy('wponline_country', 'wponline_movie', array(
        'labels' => array(
            'name' => 'Страны',
            'singular_name' => 'Страна',
            'search_items' => 'Поиск стран',
            'all_items' => 'Все страны',
            'edit_item' => 'Редактировать страну',
            'add_new_item' => 'Добавить новую страну',
            'menu_name' => 'Страны',
        ),
        'hierarchical' => false,
        'show_in_rest' => true,
        'rewrite' => array('slug' => 'country'),
    ));
}
add_action('init', 'wponline_register_taxonomies_for_movie');

Здесь мы создали и иерархическую таксономию «Жанры» (как категории) и неиерархическую «Страны» (как метки) для нашего CPT «Фильм».

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

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

  • Custom Post Type UI — удобный и бесплатный плагин для регистрации типов записей и таксономий. Позволяет быстро создавать и редактировать структуру.
  • Pods — мощный плагин для создания комплексных типов контента с пользовательскими полями, связями и шаблонами.
  • Toolset Types — платный плагин с расширенными возможностями для создания и управления CPT, таксономиями и полями.

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

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

Для отображения контента собственного типа записи обычно создают шаблон в теме WordPress. Для CPT с именем wponline_movie можно создать файлы:

  • single-wponline_movie.php — для отдельной записи;
  • archive-wponline_movie.php — для архивной страницы с перечнем.

Пример простого шаблона для отдельного фильма:

<?php get_header(); ?>

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <h1><?php the_title(); ?></h1>
    <div class="movie-content"><?php the_content(); ?></div>
    <div class="movie-meta">
        <strong>Жанры:</strong> <?php the_terms(get_the_ID(), 'wponline_genre', '', ', ', ''); ?><br>
        <strong>Страны:</strong> <?php the_terms(get_the_ID(), 'wponline_country', '', ', ', ''); ?>
    </div>
<?php endwhile; endif; ?>

<?php get_footer(); ?>

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

Советы по оптимизации и безопасности для собственных типов записей

При работе с CPT важно помнить:

  • Регулярно проверяйте права доступа и роли пользователей для безопасности.
  • Используйте show_in_rest для поддержки Gutenberg и REST API.
  • Кэшируйте запросы архива и отдельной записи для ускорения.
  • Если CPT используется для публичного контента, добавьте SEO-поддержку (например, с помощью Yoast SEO или Rank Math).

Это обеспечит удобное управление и быструю работу сайта.

Как добавить автоматическое удаление старого контента в WordPress
01.04.2026
Запрет на роботы в WordPress: как запретить индексацию ответов и комментариев
27.01.2026
Как отключить Emoji в WordPress для ускорения сайта
07.12.2025
Как отключить автоматические обновления в WordPress
30.01.2026
Авторизация по телефону в WordPress: пошаговое руководство
03.11.2025