В 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 APImenu_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, который поможет сделать сайт удобным и функциональным.