В WordPress есть мощный инструмент для расширения стандартного функционала — собственные виды записей (Custom Post Types, CPT). Они позволяют создавать новые типы контента, отличные от стандартных «Записей» и «Страниц». Например, вы можете добавить тип «Отзывы», «Портфолио» или «Товары». В этой статье подробно разберём, как создать собственный вид записей с помощью кода, какие параметры важно учитывать и как сделать вывод этого контента на сайте.
Что такое собственный вид записей и зачем он нужен в WordPress
Стандартный WordPress предоставляет два основных типа контента: записи (posts) и страницы (pages). Однако зачастую для проектов требуется более специфичный контент, который нельзя просто уместить в записи. Например, если вы ведёте сайт агентства, где нужно публиковать «Кейсы» или «Услуги», удобнее сделать отдельный тип записи с уникальными настройками и шаблонами.
Custom Post Types позволяют:
- Структурировать контент по смыслу;
- Назначать свои метаданные и таксономии;
- Использовать отдельные шаблоны отображения;
- Упростить администрирование и контент-менеджмент.
Без использования CPT контент перемешивается и теряется гибкость.
Регистрация собственного вида записей: базовый пример кода
Чтобы зарегистрировать собственный тип записи, нужно использовать функцию register_post_type(). Рекомендуется подключать эту функцию к хуку init. Ниже пример базовой регистрации типа записи «Кейсы» с префиксом WPAction:
add_action('init', 'wpaction_register_custom_post_type_cases');
function wpaction_register_custom_post_type_cases() {
$labels = array(
'name' => 'Кейсы',
'singular_name' => 'Кейс',
'add_new' => 'Добавить кейс',
'add_new_item' => 'Добавить новый кейс',
'edit_item' => 'Редактировать кейс',
'new_item' => 'Новый кейс',
'view_item' => 'Просмотреть кейс',
'search_items' => 'Искать кейсы',
'not_found' => 'Кейсы не найдены',
'not_found_in_trash' => 'В корзине кейсы не найдены',
'menu_name' => 'Кейсы'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'cases'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
'show_in_rest' => true
);
register_post_type('wpaction_cases', $args);
}Этот код создаст новый пункт меню «Кейсы» в админ-панели, где вы сможете добавлять и редактировать записи этого типа.
Объяснение параметров
labels — массив с названиями и подписями для интерфейса админки.public — делает тип записи доступным и на фронтенде, и в админке.has_archive — включает архивный список всех записей этого типа по адресу /cases/rewrite — настройка ЧПУ (человекопонятных URL).supports — определяет, какие стандартные возможности редактора задействованы.menu_icon — иконка в админ-меню.show_in_rest — позволяет использовать Gutenberg и REST API.
Добавление кастомных таксономий для собственного типа записи
Часто нужно не только добавить новый тип записи, но и организовать для него категории или метки, отличные от стандартных. Для этого создаются кастомные таксономии с помощью функции register_taxonomy(). Рассмотрим пример создания таксономии «Тип кейса» для CPT «Кейсы».
add_action('init', 'wpaction_register_taxonomy_case_type');
function wpaction_register_taxonomy_case_type() {
$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' => 'case-type'),
'show_in_rest' => true
);
register_taxonomy('wpaction_case_type', 'wpaction_cases', $args);
}В результате в редакторе «Кейсов» появится блок для выбора типа кейса, который можно создавать и редактировать отдельно.
Вывод собственного типа записей на фронтенде
Чтобы вывести записи собственного типа на сайте, можно использовать WP_Query с указанием параметра post_type. Например, выведем список последних 5 кейсов с заголовками и ссылками:
$args = array(
'post_type' => 'wpaction_cases',
'posts_per_page' => 5
);
$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 '<p>Кейсы не найдены.</p>';
}Этот код можно вставить в шаблон темы, например, в archive-wpaction_cases.php или в любой другой файл для вывода контента.
Создание отдельного шаблона для собственного типа записи
WordPress автоматически использует шаблон single.php для вывода одиночной записи. Чтобы сделать отдельный дизайн для CPT, создайте файл single-wpaction_cases.php в папке темы. Код внутри можно адаптировать под особенности типа записи.
Пример простого шаблона:
<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="case-content"><?php the_content(); ?></div>
<?php endwhile; endif; ?>
<?php get_footer(); ?>Такой подход позволяет полностью контролировать вывод контента для каждого типа записи.
Полезные плагины для работы с собственными типами записей
Если хочется обойтись без кода или расширить возможности, обратите внимание на эти плагины:
- Custom Post Type UI — удобный интерфейс для создания и редактирования CPT и таксономий без кода.
- Advanced Custom Fields (ACF) — добавляет мощные поля и метаданные к любым типам записей.
- Pods — комплексный инструмент для создания CPT, таксономий и дополнительных полей с гибкой настройкой.
Эти плагины помогут быстро настроить и расширить функционал вашего сайта.
Советы по разработке и безопасности собственного типа записей
При создании CPT важно придерживаться следующих рекомендаций:
- Используйте уникальные префиксы в именах функций и слагов, чтобы избежать конфликтов (например,
wpaction_register_custom_post_type_cases). - Обязательно регистрируйте CPT и таксономии на хуке
init, чтобы гарантировать их доступность. - Если ваш сайт использует кэширование, не забудьте сбросить его после добавления CPT.
- При необходимости ограничивайте права доступа к CPT через
capabilitiesв аргументахregister_post_type. - Проверяйте поддержку REST API (
show_in_rest), если планируете использовать редактор Gutenberg или создавать кастомные интерфейсы с помощью JS.
Таким образом, вы создадите надёжный и удобный для пользователя тип записи.