В WordPress базовый тип контента — это записи (posts) и страницы (pages). Но для многих проектов этого недостаточно, и тогда на помощь приходят Custom Post Types — собственные типы записей. Они позволяют структурировать контент под конкретные задачи, например, добавить «Портфолио», «Отзывы», «События» и т.п.
Что такое Custom Post Type и зачем он нужен
Custom Post Type (CPT) — это дополнительный тип записей, который вы регистрируете в WordPress. Он полностью независим от стандартных «Записей» и «Страниц» и может иметь собственные поля, метаданные, таксономии и шаблоны отображения.
Преимущества использования CPT:
- Структурирование контента по смыслу.
- Упрощение управления разными типами данных в админке.
- Разграничение функционала и шаблонов для разных типов контента.
Пример: если у вас сайт агентства, можно создать CPT «Проекты» с отдельным интерфейсом и отображением.
Как зарегистрировать Custom Post Type вручную в WordPress
Для регистрации CPT используется функция register_post_type(). Добавлять код лучше в файл functions.php вашей темы или в отдельный плагин, если хотите сохранить типы записей при смене темы.
Обязательная часть — уникальный идентификатор типа и массив аргументов с настройками.
Пример регистрации CPT «Проекты»
function wpreboot_register_projects_cpt() {
$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' => 'projects'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'show_in_rest' => true // поддержка Gutenberg
);
register_post_type('wpreboot_project', $args);
}
add_action('init', 'wpreboot_register_projects_cpt');В этом примере мы создали CPT с ключом wpreboot_project. Обратите внимание на параметр show_in_rest — он включает поддержку редактора Gutenberg для нового типа записей.
Настройка отображения и таксономий для CPT
Для удобства работы с CPT можно добавить собственные таксономии (категории, метки) или использовать стандартные. Вот как зарегистрировать таксономию «Тип проекта» для CPT «Проекты».
function wpreboot_register_project_taxonomy() {
$labels = array(
'name' => 'Типы проектов',
'singular_name' => 'Тип проекта',
'search_items' => 'Поиск типов проектов',
'all_items' => 'Все типы проектов',
'edit_item' => 'Редактировать тип проекта',
'add_new_item' => 'Добавить новый тип проекта',
'menu_name' => 'Типы проектов'
);
$args = array(
'labels' => $labels,
'hierarchical' => true, // как категории
'show_in_rest' => true,
'rewrite' => array('slug' => 'project-type')
);
register_taxonomy('wpreboot_project_type', 'wpreboot_project', $args);
}
add_action('init', 'wpreboot_register_project_taxonomy');Теперь в админке у проектов появится дополнительное меню для выбора типа проекта.
Как вывести записи собственного типа на сайте
Для вывода CPT в шаблонах можно использовать стандартный WP_Query, указав параметр post_type.
Пример простого вывода последних 5 проектов:
$projects = new WP_Query(array(
'post_type' => 'wpreboot_project',
'posts_per_page' => 5
));
if ($projects->have_posts()) :
while ($projects->have_posts()) : $projects->the_post();
echo '<h2>' . get_the_title() . '</h2>';
the_excerpt();
endwhile;
wp_reset_postdata();
else :
echo 'Проекты не найдены';
endif;Этот код можно вставить в любой шаблон темы, например, в page-projects.php или в кастомный шаблон страницы.
Полезные плагины для работы с Custom Post Types
Хотя сейчас мы делаем всё вручную, иногда полезно использовать плагины для удобства:
- Custom Post Type UI — интерфейс для создания CPT и таксономий без кода.
- Advanced Custom Fields (ACF) — добавление любых дополнительных полей к CPT.
- Clearfy Pro — оптимизация и управление CPT, если используете много кастомизаций.
Для сайта на базе темы Reboot можно легко интегрировать CPT, добавив шаблоны по типу single-wpreboot_project.php и archive-wpreboot_project.php для вывода контента.
Советы и лучшие практики при работе с CPT
Создавая свои типы записей, учитывайте следующие моменты:
- Используйте уникальные префиксы в ключах функций и CPT, например,
wpreboot_, чтобы избежать конфликтов. - Добавляйте поддержку REST API (
show_in_rest), чтобы использовать редактор Gutenberg и интеграцию с внешними приложениями. - Создавайте отдельные шаблоны для корректного вывода контента и SEO.
- Оптимизируйте запросы WP_Query, чтобы не перегружать сайт.
Если хотите сделать CPT переносимым, лучше оформить регистрацию в отдельном плагине, а не в теме.