Создание собственного типа записи (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).
Это обеспечит удобное управление и быструю работу сайта.