Пользовательские типы записей (Custom Post Types, CPT) — это мощный инструмент WordPress, который позволяет расширить функциональность сайта за пределы стандартных записей и страниц. С их помощью можно создать отдельные разделы контента, например, портфолио, отзывы, товары и многое другое. В этой статье мы подробно рассмотрим, как самостоятельно зарегистрировать CPT, как правильно настроить их отображение и использовать в шаблонах, а также приведём практические примеры кода.
Что такое пользовательские типы записей в WordPress и зачем они нужны
По умолчанию WordPress имеет несколько типов записей: post (записи), page (страницы), attachment (медиафайлы) и др. Однако часто бывает необходимо добавить отдельный тип контента, который логически не вписывается в стандартные записи или страницы. Например, если у вас сайт с каталогом книг, удобно сделать для них отдельный тип записи — «Книга».
Пользовательские типы записей позволяют:
- Структурировать контент по тематикам.
- Упростить администрирование сайта для клиентов.
- Настроить отдельные шаблоны отображения.
- Использовать свои таксономии (категории, метки) для CPT.
Это существенно расширяет возможности WordPress как CMS.
Регистрация пользовательского типа записи: базовый пример кода
Чтобы создать CPT, нужно использовать функцию register_post_type(). Её следует вызывать в хуке init, чтобы зарегистрировать тип на раннем этапе загрузки WordPress.
function wpbook_register_cpt_book() {
$labels = array(
'name' => 'Книги',
'singular_name' => 'Книга',
'menu_name' => 'Книги',
'name_admin_bar' => 'Книга',
'add_new' => 'Добавить книгу',
'add_new_item' => 'Добавить новую книгу',
'new_item' => 'Новая книга',
'edit_item' => 'Редактировать книгу',
'view_item' => 'Просмотреть книгу',
'all_items' => 'Все книги',
'search_items' => 'Искать книги',
'not_found' => 'Книг не найдено.',
'not_found_in_trash' => 'В корзине книг не найдено.',
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'book'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
);
register_post_type('book', $args);
}
add_action('init', 'wpbook_register_cpt_book');
В этом коде создаётся тип записи с ключом book, который будет отображаться в админке под названием «Книги» с набором стандартных возможностей (заголовок, редактор, миниатюра и т.д.).
Настройка таксономий для CPT: категории и метки
Для удобной классификации записей нового типа стоит добавить пользовательские таксономии аналогично стандартным категориям и меткам. Это делается с помощью функции register_taxonomy().
Пример регистрации таксономии «Жанры» для книги:
function wpbook_register_taxonomy_genre() {
$labels = array(
'name' => 'Жанры',
'singular_name' => 'Жанр',
'search_items' => 'Искать жанры',
'all_items' => 'Все жанры',
'edit_item' => 'Редактировать жанр',
'update_item' => 'Обновить жанр',
'add_new_item' => 'Добавить новый жанр',
'new_item_name' => 'Название нового жанра',
'menu_name' => 'Жанры',
);
$args = array(
'hierarchical' => true, // как категории
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'genre'),
);
register_taxonomy('genre', array('book'), $args);
}
add_action('init', 'wpbook_register_taxonomy_genre');
После этого в админке у записей типа «Книга» появится метабокс для выбора жанров.
Как вывести записи CPT в шаблоне темы
Для отображения записей CPT на сайте можно использовать класс WP_Query с параметром post_type. Например, чтобы вывести список последних книг, можно добавить следующий код в шаблон:
$args = array(
'post_type' => 'book',
'posts_per_page' => 10,
);
$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 'Книги не найдены';
}
Такой способ универсален и позволяет гибко выводить любые пользовательские типы записей.
Рекомендации по использованию CPT и полезные плагины
Если вы не хотите писать код, можно воспользоваться плагинами, которые создают CPT через интерфейс:
- Custom Post Type UI — популярный плагин для создания и управления CPT и таксономиями без кода.
- Toolset Types — комплексное решение для создания CPT, полей и связей.
Кроме того, для кастомных полей рекомендуется использовать Advanced Custom Fields (ACF), который отлично интегрируется с CPT и упрощает создание сложных интерфейсов ввода данных.
Как зарегистрировать CPT с поддержкой REST API для Gutenberg и внешних приложений
Если вы планируете использовать новый редактор Gutenberg или обращаться к CPT через REST API, обязательно добавьте параметр show_in_rest в true при регистрации типа записи:
'show_in_rest' => true,
Это позволит редактировать записи CPT в Gutenberg и получать их через API, что особенно полезно при разработке SPA или мобильных приложений.
Итог
Создание пользовательских типов записей — необходимый навык для гибкой настройки WordPress под любые задачи. С помощью простого кода можно расширить возможности сайта, структурировать контент и подготовить отдельные разделы для удобства пользователей и администраторов. Используйте приведённые примеры и рекомендации, чтобы быстро и корректно реализовать CPT на вашем сайте.