В WordPress по умолчанию есть несколько типов записей, таких как записи (posts) и страницы (pages). Однако для расширения функционала сайта часто требуется создать собственные типы записей — Custom Post Types (CPT). Это позволяет структурировать контент более гибко и удобно для пользователей и разработчиков.
Что такое Custom Post Type и зачем он нужен
Custom Post Type — это пользовательский тип записи, который можно использовать для хранения и отображения специфического контента. Например, если вы ведёте сайт с рецептами, можно создать CPT «Рецепты», чтобы отделить их от стандартных записей блога.
Создание собственного типа записи помогает:
- Логично структурировать данные;
- Упростить администрирование сайта;
- Создать индивидуальные шаблоны отображения;
- Использовать собственные метаполя и таксономии.
Давайте разберём, как создать CPT на примере типа записи «События».
Создание Custom Post Type через functions.php
Самый простой способ добавить CPT — зарегистрировать его в файле functions.php вашей темы или в отдельном плагине. Используйте функцию register_post_type.
function wpfront_register_event_post_type() {
$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' => 'events'),
'show_in_rest' => true, // для поддержки Gutenberg
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'menu_position' => 5,
'menu_icon' => 'dashicons-calendar-alt',
);
register_post_type('wpfront_event', $args);
}
add_action('init', 'wpfront_register_event_post_type');После добавления этого кода и обновления админки WordPress вы увидите новый пункт меню «События» с возможностью создавать записи этого типа.
Добавление пользовательских таксономий для типа записи
Чтобы лучше структурировать контент, к CPT можно добавить собственные таксономии (например, категории и теги для событий). Вот как это сделать:
function wpfront_register_event_taxonomies() {
// Таксономия "Место проведения"
$labels_location = array(
'name' => 'Места проведения',
'singular_name' => 'Место проведения',
'search_items' => 'Искать места',
'all_items' => 'Все места',
'edit_item' => 'Редактировать место',
'update_item' => 'Обновить место',
'add_new_item' => 'Добавить новое место',
'new_item_name' => 'Новое название места',
'menu_name' => 'Места проведения',
);
$args_location = array(
'hierarchical' => true, // как категории
'labels' => $labels_location,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'event-location'),
'show_in_rest' => true,
);
register_taxonomy('wpfront_event_location', array('wpfront_event'), $args_location);
}
add_action('init', 'wpfront_register_event_taxonomies');Теперь при создании события можно будет выбрать место проведения из списка или добавить новое.
Вывод Custom Post Type на сайте — шаблон и WP_Query
Чтобы вывести записи CPT на фронтенде, можно создать файл шаблона, например archive-wpfront_event.php в папке вашей темы. В этом файле вы пишете обычный цикл WordPress, который выводит записи типа «Событие».
Пример простого вывода:
<?php get_header(); ?>
<h1>События</h1>
<?php if (have_posts()) : ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p>События не найдены.</p>
<?php endif; ?>
<?php get_footer(); ?>Если вы хотите вывести события в любом месте сайта, используйте класс WP_Query с параметром post_type:
$args = array(
'post_type' => 'wpfront_event',
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC'
);
$events_query = new WP_Query($args);
if ($events_query->have_posts()) {
echo '<ul>';
while ($events_query->have_posts()) {
$events_query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
} else {
echo '<p>События не найдены.</p>';
}
wp_reset_postdata();Полезные плагины для управления Custom Post Types
Если не хочется писать код вручную, существуют плагины, которые помогут создать и управлять CPT через визуальный интерфейс:
- Custom Post Type UI — удобный плагин для создания CPT и таксономий;
- Advanced Custom Fields — добавляет кастомные поля к любым типам записей;
- Clearfy Pro — оптимизирует работу WordPress, в том числе улучшает работу с CPT.
Использование плагинов удобно для пользователей без опыта программирования, но опытным разработчикам стоит знать, как делать это через код для максимальной гибкости.
Советы по организации и оптимизации CPT
При создании собственного типа записи учитывайте:
- Уникальность
post_type— используйте префикс, например,wpfront_, чтобы избежать конфликтов с другими плагинами и темами; - Обязательно задавайте понятные и полные метки (
labels) для удобства пользователей в админке; - Подключайте поддержку REST API (
show_in_rest => true), если планируете использовать Gutenberg или делать собственные приложения на React/Vue; - Оптимизируйте запросы и не создавайте слишком много CPT без необходимости — это может повлиять на производительность;
- Создавайте отдельные шаблоны для CPT, чтобы контролировать вывод и дизайн.
Правильная организация позволяет сделать сайт удобным как для посетителей, так и для администраторов.