Создание собственного типа записи (Custom Post Type, CPT) в WordPress — это мощный способ расширить возможности вашего сайта, добавив новые структуры контента, помимо стандартных «Записей» и «Страниц». В этой статье мы подробно разберём, как создать CPT, зарегистрировать его с помощью кода, настроить отображение в админке и на фронтенде, а также рассмотрим полезные плагины для упрощения работы.
Что такое собственный тип записи и зачем он нужен
По умолчанию WordPress предоставляет два основных типа записей: posts (записи) и pages (страницы). Но часто для сайтов нужна своя структура данных — например, для портфолио, отзывов, мероприятий, товаров и т.п. В таких случаях создание CPT позволяет:
- Разграничить контент по логическим блокам;
- Настроить отдельные шаблоны отображения;
- Добавить новые метаполя и таксономии;
- Упростить управление контентом в админке.
При правильной реализации CPT можно легко интегрировать с SEO-плагинами, фильтрами и другими инструментами.
Регистрация собственного типа записи с помощью кода
Для регистрации CPT используется функция register_post_type(). Лучше всего добавлять этот код в файл functions.php вашей дочерней темы или в отдельный плагин, чтобы изменения не потерялись при обновлении.
Пример функции регистрации CPT «Кейсы»
function wordpressy_register_cpt_cases() {
$labels = array(
'name' => 'Кейсы',
'singular_name' => 'Кейс',
'menu_name' => 'Кейсы',
'name_admin_bar' => 'Кейс',
'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,
'has_archive' => true,
'menu_icon' => 'dashicons-portfolio',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true,
'rewrite' => array('slug' => 'cases'),
);
register_post_type('wordpressy_cases', $args);
}
add_action('init', 'wordpressy_register_cpt_cases');В этом примере мы создали CPT с названием «wordpressy_cases», который поддерживает заголовок, редактор, миниатюры и пользовательские поля. Параметр show_in_rest включён для поддержки Gutenberg и REST API.
Настройка пользовательских таксономий для CPT
Для удобной организации записей типа кейсы можно добавить собственные таксономии — категории или теги. Это позволит фильтровать и группировать контент внутри CPT.
Пример регистрации таксономии «Тип кейса»
function wordpressy_register_taxonomy_case_type() {
$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' => 'case-type'),
);
register_taxonomy('wordpressy_case_type', 'wordpressy_cases', $args);
}
add_action('init', 'wordpressy_register_taxonomy_case_type');Теперь в админке появится новая таксономия для типа записей кейсы, позволяющая лучше структурировать информацию.
Отображение CPT на сайте: шаблоны и вывод данных
Чтобы выводить собственные типы записей на сайте, нужны отдельные шаблоны в вашей теме. WordPress ищет файлы шаблонов по иерархии:
single-{post_type}.php— для одиночной записи CPT;archive-{post_type}.php— для страницы архива CPT.
Если таких файлов нет, WordPress будет использовать single.php или archive.php. Рекомендуется создавать отдельные шаблоны для кастомных типов.
Пример простого шаблона single-wordpressy_cases.php
<?php
get_header();
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="case-content"><?php the_content(); ?></div>
<?php
endwhile; endif;
get_footer();
?>Плагины для работы с CPT и расширением функционала
Если вы предпочитаете не писать код, есть удобные плагины для создания и управления CPT:
- Custom Post Type UI — удобный интерфейс для создания и редактирования типов записей и таксономий;
- Advanced Custom Fields Pro — мощный инструмент для добавления и настройки пользовательских полей к CPT;
- Clearfy Pro — для оптимизации и управления функционалом CPT и других элементов WordPress.
Эти плагины помогут упростить работу, особенно если вы не хотите углубляться в детали кода.
Пользовательские функции и хуки для расширения CPT
После регистрации CPT можно создавать кастомные функции для выборки и вывода данных. Для примера — функция для получения последних 5 кейсов:
function wordpressy_get_latest_cases($number = 5) {
$args = array(
'post_type' => 'wordpressy_cases',
'posts_per_page' => $number,
'post_status' => 'publish',
);
$query = new WP_Query($args);
return $query;
}Использовать её можно так:
$cases = wordpressy_get_latest_cases();
if ($cases->have_posts()) {
while ($cases->have_posts()) {
$cases->the_post();
echo '<h2>' . get_the_title() . '</h2>';
echo '<div>' . get_the_excerpt() . '</div>';
}
wp_reset_postdata();
}Также можно использовать хуки manage_edit-{post_type}_columns и manage_{post_type}_posts_custom_column для добавления и настройки колонок в админке.
SEO и пермалинки для CPT
Для правильной индексации важно настроить ЧПУ (человеко-понятные URL). В параметре rewrite при регистрации CPT задайте удобный слаг. Например, 'slug' => 'cases'. После регистрации CPT необходимо обновить настройки постоянных ссылок в админке — перейти в «Настройки» > «Постоянные ссылки» и нажать «Сохранить изменения».
Для SEO-поддержки CPT совместимы с большинством популярных плагинов, например Rank Math или Yoast SEO, которые автоматически добавляют поддержку CPT.
Важные советы и рекомендации по работе с CPT
- Выбирайте уникальный идентификатор для CPT, чтобы не было конфликтов с другими плагинами или темами.
- Используйте
show_in_rest = true, чтобы обеспечить поддержку блокового редактора и REST API. - Добавляйте поддержку миниатюр и пользовательских полей для расширения контента.
- Регулярно проверяйте совместимость CPT с обновлениями WordPress и плагинов.
- При необходимости используйте плагины для упрощения создания и управления CPT, особенно если не хотите писать много кода.
Правильное использование собственных типов записей позволит сделать ваш сайт на WordPress более структурированным, гибким и удобным как для редакторов, так и для посетителей.