Создание собственного типа записи (Custom Post Type, CPT) — это мощный инструмент для расширения функционала WordPress. Вместо того чтобы использовать стандартные записи или страницы, вы можете добавить уникальные типы контента, например, портфолио, отзывы, мероприятия или товары. В этой статье мы подробно разберем, как создать CPT с помощью кода, рассмотрим основные параметры и дадим практические советы.
Что такое Custom Post Type и зачем он нужен
WordPress изначально поддерживает несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и некоторые другие. Однако для многих проектов этого бывает недостаточно. Custom Post Type позволяет создать свой тип контента с уникальными свойствами и логикой вывода.
Например, если вы разрабатываете сайт агентства и хотите добавить раздел «Проекты», где будут отображаться законченные работы, то создание CPT «Проекты» будет логичным решением. Это позволит легко отделить их от обычных записей блога и упростит управление контентом.
Кроме того, CPT можно использовать для интеграции с плагинами и темами, которые поддерживают их. Это расширяет возможности сайта и улучшает удобство работы для администраторов.
Регистрация собственного типа записи — базовый пример
Для регистрации CPT используется функция register_post_type(), которую нужно вызвать в хуке init. Ниже пример минимального кода для создания CPT с названием «portfolio» (портфолио):
function wpbuy_register_post_type_portfolio() {
$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' => 'portfolio'),
'show_in_rest' => true, // поддержка Gutenberg
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
);
register_post_type('portfolio', $args);
}
add_action('init', 'wpbuy_register_post_type_portfolio');Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. После активации CPT появится в админ-панели WordPress в меню «Портфолио».
Подробный разбор параметров register_post_type
Параметры в массиве $args позволяют гибко настроить поведение CPT:
- public — доступен ли тип записи публично (на сайте и в админке). Обычно ставим
true. - has_archive — включить ли архивный список для CPT. Если
true, то по адресу/portfolio/будет архив проектов. - rewrite — настройки ЧПУ (человеко-понятных URL). Можно указать свой slug.
- show_in_rest — обязательно для поддержки редактора Gutenberg и REST API.
- supports — массив поддерживаемых функций: заголовок, редактор, миниатюры и др.
- menu_icon — иконка в меню админки (используются dashicons).
- menu_position — позиция в меню, чтобы CPT не потерялся.
Эти и другие параметры вы найдете в официальной документации WordPress. Их грамотная настройка влияет на удобство работы с типом записи.
Добавление пользовательских полей и таксономий к CPT
Часто CPT используют вместе с пользовательскими полями (Custom Fields) и таксономиями (категории, метки). Например, для портфолио можно добавить поле «Год разработки» и таксономию «Тип проекта».
Для регистрации пользовательских таксономий используйте функцию register_taxonomy(). Пример добавления таксономии «Тип проекта» к CPT «portfolio»:
function wpbuy_register_taxonomy_project_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_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'project-type'),
'show_in_rest' => true,
);
register_taxonomy('project_type', array('portfolio'), $args);
}
add_action('init', 'wpbuy_register_taxonomy_project_type');Для пользовательских полей можно использовать мета-боксы или плагины, например, Advanced Custom Fields (ACF), который значительно упрощает создание и управление мета-данными.
Вывод Custom Post Type на сайте — примеры шаблонов и запросов
Для вывода CPT на сайте создайте шаблон archive-portfolio.php для архива и single-portfolio.php для отдельной записи. Это позволит кастомизировать внешний вид.
Пример простого цикла для вывода CPT в шаблоне:
<?php
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => 10,
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div><?php the_excerpt(); ?></div>
<?php endwhile;
wp_reset_postdata();
else :
echo '<p>Проекты не найдены.</p>';
endif;
?>Для вывода пользовательских полей используйте функции get_post_meta() или интегрируйтесь с ACF.
Полезные плагины для работы с Custom Post Types
Хотя кодовое создание CPT дает полный контроль, существуют удобные плагины, которые позволяют создавать и управлять типами записей без программирования:
- Types — Toolset — мощный конструктор CPT, таксономий и пользовательских полей.
- Custom Post Type UI — простой и популярный плагин для создания CPT и таксономий.
- Advanced Custom Fields Pro — для создания сложных пользовательских полей.
В некоторых случаях удобнее использовать плагины, особенно если вы не хотите писать много кода. Но для оптимизации и полного контроля лучше создавать CPT вручную.
Советы по созданию и использованию Custom Post Types
1. Всегда давайте уникальное и логичное имя для CPT (не используйте имена, которые могут конфликтовать с плагинами или ядром WordPress).
2. Используйте параметр show_in_rest для поддержки редактора Gutenberg и новых функций WordPress.
3. Планируйте, какие поля и таксономии будут связаны с CPT заранее — это облегчит дальнейшее развитие сайта.
4. Для кастомных шаблонов используйте стандарты WordPress, чтобы сохранить совместимость с темой.
5. Тестируйте работу CPT на разных этапах разработки, особенно если используете нестандартные таксономии и метаполя.
Заключение
Создание собственного типа записи — один из самых полезных и востребованных приемов при разработке сайтов на WordPress. Он позволяет структурировать контент, улучшить навигацию и адаптировать сайт под конкретные задачи. Используйте предоставленный пример и рекомендации, чтобы быстро и качественно добавить новый тип контента на ваш сайт.