WordPress изначально работает с двумя основными типами записей — записями (posts) и страницами (pages). Но для более гибкой организации контента часто требуется создавать уникальные типы записей, которые называются Custom Post Types (CPT). В этой статье мы подробно разберём, как именно создавать и настраивать такие типы записей, чтобы ваш сайт соответствовал любым требованиям.
Что такое Custom Post Type и зачем он нужен
Custom Post Type — это пользовательский тип записи, который позволяет создавать отдельные сущности контента, отличные от стандартных записей и страниц. Например, если у вас сайт с каталогом книг, вы можете создать тип записи «Книги», чтобы отделить их от обычных записей блога.
Использование CPT помогает:
- Структурировать контент по категориям, отражающим особенности проекта.
- Улучшить юзабилити как для администраторов сайта, так и для пользователей.
- Расширить функционал без сложных костылей и хака стандартных типов записей.
Разберём, как это реализовать на практике.
Регистрация Custom Post Type — базовый пример
Для создания CPT нужно использовать функцию wpcat_register_custom_post_type(), которую мы зарегистрируем в файле functions.php вашей темы или в отдельном плагине. Ниже пример кода для создания типа записи «Книги» (books):
function wpcat_register_custom_post_type() {
$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' => 'books'),
'show_in_rest' => true, // поддержка Gutenberg
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'menu_position' => 5,
'menu_icon' => 'dashicons-book',
);
register_post_type('books', $args);
}
add_action('init', 'wpcat_register_custom_post_type');Этот код создаёт новый тип записи «Книги» с поддержкой заголовка, редактора, миниатюры и метаполей. В админке появится отдельный пункт меню с иконкой книги.
Настройка таксономий для Custom Post Type
Для удобной категоризации записей CPT желательно создавать свои таксономии — аналоги категорий и тегов. Например, для книг можно добавить таксономию «Жанры».
Пример создания таксономии «Жанры» для CPT «Книги»:
function wpcat_register_taxonomy() {
$labels = array(
'name' => 'Жанры',
'singular_name' => 'Жанр',
'search_items' => 'Искать жанры',
'all_items' => 'Все жанры',
'parent_item' => 'Родительский жанр',
'parent_item_colon' => 'Родительский жанр:',
'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('books'), $args);
}
add_action('init', 'wpcat_register_taxonomy');Теперь у каждого объекта «Книга» можно выбрать жанр. Это улучшит навигацию и поиск по сайту.
Отображение Custom Post Type на сайте
После регистрации CPT и таксономий нужно вывести их на фронтенде. Для этого создайте файлы шаблонов в теме:
archive-books.php— для списка всех книг;single-books.php— для отображения одной книги.
Пример простого цикла для archive-books.php:
<?php get_header(); ?>
<h1>Каталог книг</h1>
<?php if ( have_posts() ) : ?>
<ul>
<?php while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p>Книги не найдены.</p>
<?php endif; ?>
<?php get_footer(); ?>Похожим образом можно вывести отдельную запись в single-books.php, добавив вывод произвольных полей и таксономий.
Реальные кейсы использования Custom Post Type
Custom Post Types — отличный инструмент для сайтов разной тематики:
- Портфолио для дизайнеров и фотографов;
- Каталоги продукции с фильтрами и атрибутами;
- События и мероприятия с датами и местами проведения;
- Отзывы клиентов и партнеров;
- Рецепты, вакансии, объявления — любые отдельные сущности.
Благодаря CPT можно сделать структуру сайта максимально удобной для управления и масштабирования.
Советы по оптимизации и безопасности
Несколько рекомендаций:
- Используйте уникальные префиксы для функций и имён CPT, чтобы избежать конфликтов (например,
wpcat_register_custom_post_type). - Обязательно регистрируйте CPT на хук
init, чтобы всё корректно инициализировалось. - Если не используете REST API, отключайте его для CPT в параметрах (
'show_in_rest' => false), чтобы снизить нагрузку. - Для сложных проектов лучше создавать отдельный плагин для CPT, а не писать код в functions.php.
- Тестируйте пермалинки после добавления CPT — иногда нужно обновить настройки ссылок в админке.