В WordPress по умолчанию есть несколько типов записей, таких как «посты» и «страницы». Однако часто возникает необходимость создать собственный тип записи, чтобы структурировать контент более гибко и удобно. Например, для портфолио, отзывов, товаров или событий. В этой статье мы подробно разберём, как создать Custom Post Type (CPT) с примерами кода и настройками.
Что такое Custom Post Type и зачем он нужен
Custom Post Type — это пользовательский тип записей, который позволяет расширить стандартные возможности WordPress. Использование CPT даёт следующие преимущества:
- Группировка похожих данных в отдельный тип записи
- Удобство управления и отображения контента через админ-панель
- Возможность применять отдельные шаблоны и таксономии
- Улучшение структуры сайта и SEO
Например, если вы ведёте сайт с рецептами, создание CPT «Рецепты» позволит отделить их от обычных новостей или статей.
Основные параметры при регистрации собственного типа записей
Для регистрации CPT в WordPress используется функция register_post_type(). Она принимает два параметра — идентификатор типа и массив настроек. Ключевые параметры:
- labels — массив с названиями для интерфейса
- public — отображать ли в публичной части сайта
- show_in_menu — показывать ли в админ-панели меню
- supports — какие стандартные возможности подключить (заголовок, редактор, миниатюра и др.)
- has_archive — поддержка архива типа записей
- rewrite — настройка ЧПУ (человекопонятных URL)
Разберём на конкретном примере.
Пример кода: создание типа записей «Отзывы»
Добавьте следующий код в файл functions.php вашей темы или создайте небольшой плагин. Код создаст новый тип записей с именем wpclass_review для отзывов клиентов.
function wpclass_register_review_cpt() {
$labels = array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'menu_name' => 'Отзывы',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'view_item' => 'Просмотреть отзыв',
'search_items' => 'Искать отзывы',
'not_found' => 'Отзывы не найдены',
'not_found_in_trash' => 'В корзине отзывы не найдены',
);
$args = array(
'labels' => $labels,
'public' => true,
'show_in_menu' => true,
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
'has_archive' => true,
'rewrite' => array('slug' => 'otzyvy'),
'menu_icon' => 'dashicons-testimonial',
'show_in_rest' => true, // Для поддержки Gutenberg
);
register_post_type('wpclass_review', $args);
}
add_action('init', 'wpclass_register_review_cpt');Объяснение кода:
- В
$labelsзадаются пользовательские названия для интерфейса админки. - В
$argsопределяются параметры: публичный тип, поддержка редактора, миниатюр, настраиваемых полей. 'rewrite' => array('slug' => 'otzyvy')позволяет получить URL видаsite.ru/otzyvy/название-отзыва.show_in_restвключает поддержку редактора Gutenberg и REST API.
Как добавить мета-блоки для дополнительных полей отзывов
Чтобы хранить дополнительные данные, например, рейтинг, имя клиента и дату, лучше использовать мета-боксы. Пример добавления мета-бокса с полем "Рейтинг":
function wpclass_add_review_meta_box() {
add_meta_box(
'wpclass_review_rating',
'Рейтинг отзыва',
'wpclass_review_rating_callback',
'wpclass_review',
'side'
);
}
add_action('add_meta_boxes', 'wpclass_add_review_meta_box');
function wpclass_review_rating_callback($post) {
$value = get_post_meta($post->ID, '_wpclass_review_rating', true);
echo '<label for="wpclass_review_rating_field">Рейтинг (1-5):</label> ';
echo '<input type="number" id="wpclass_review_rating_field" name="wpclass_review_rating_field" value="'.esc_attr($value).'" min="1" max="5" />';
}
function wpclass_save_review_meta_box_data($post_id) {
if (array_key_exists('wpclass_review_rating_field', $_POST)) {
update_post_meta(
$post_id,
'_wpclass_review_rating',
intval($_POST['wpclass_review_rating_field'])
);
}
}
add_action('save_post', 'wpclass_save_review_meta_box_data');Этот код добавляет поле «Рейтинг» в редактор отзывов и сохраняет введённое значение при сохранении записи.
Подключение шаблонов для отображения Custom Post Type
Чтобы выводить отзывы красиво на сайте, можно создать отдельные шаблоны:
single-wpclass_review.php— для отдельного отзываarchive-wpclass_review.php— для страницы архива отзывов
В этих файлах можно использовать стандартные функции WordPress для вывода заголовка, содержимого и мета-данных, например:
<?php
get_header();
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div><?php the_content(); ?></div>
<p>Рейтинг: <?php echo esc_html(get_post_meta(get_the_ID(), '_wpclass_review_rating', true)); ?></p>
<?php endwhile; endif; get_footer(); ?><Полезные плагины для работы с Custom Post Types
Если вы не хотите программировать самостоятельно, можно воспользоваться плагинами:
- Custom Post Type UI — удобный интерфейс для создания и настройки CPT и таксономий.
- Advanced Custom Fields — мощный инструмент для добавления и управления дополнительными полями.
Оба плагина поддерживают интеграцию с Gutenberg и REST API.
Советы по оптимизации и безопасности
При создании CPT важно не забывать:
- Правильно называть тип записи, используя префикс (например,
wpclass_), чтобы избежать конфликтов с другими плагинами. - Добавлять поддержку REST API через
show_in_rest => true, чтобы использовать редактор Gutenberg и внешние приложения. - Регулярно проверять права доступа, чтобы не допустить несанкционированного редактирования.
- Создавать отдельные шаблоны для CPT, чтобы улучшить UX и SEO.