В WordPress стандартно доступны такие типы записей, как записи (posts) и страницы (pages). Но часто возникает необходимость добавить уникальный тип контента, например, портфолио, события, товары или отзывы. Для этого в WordPress предусмотрена возможность создания собственных типов записей — Custom Post Types (CPT).
Что такое Custom Post Type и зачем он нужен
Custom Post Type — это специальный тип контента, который вы создаёте для структурирования и управления информацией на сайте. В отличие от стандартных записей, CPT позволяют разделить контент по смыслу и функционалу, что упрощает управление и улучшает удобство для пользователей и администраторов.
Например, если вы ведёте сайт о фильмах, можно создать CPT «Фильмы» с кастомным набором полей и таксономий, отдельным меню в админке и индивидуальным шаблоном вывода.
Регистрация собственного типа записи в WordPress
Для регистрации CPT используется функция register_post_type(). Лучше всего добавлять регистрацию в файл темы functions.php или в отдельный плагин.
Рассмотрим пример регистрации CPT «Портфолио» с базовыми настройками:
function wpconfig_register_portfolio_cpt() {
$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' => 'portfolio'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'show_in_rest' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
'taxonomies' => array('category', 'post_tag'),
);
register_post_type('portfolio', $args);
}
add_action('init', 'wpconfig_register_portfolio_cpt');В данном коде мы задали название, описание, включили поддержку редактора, миниатюр и отрывков, а также включили REST API для Gutenberg и других приложений.
Дополнительные возможности и настройка Custom Post Type
Полезно знать, что у CPT можно добавить собственные таксономии (категории и метки), кастомные поля и метабоксы. Для таксономий используется функция register_taxonomy(). Рассмотрим добавление таксономии «Тип работы» для портфолио:
function wpconfig_register_work_type_taxonomy() {
$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_in_rest' => true,
'rewrite' => array('slug' => 'work-type'),
);
register_taxonomy('work_type', array('portfolio'), $args);
}
add_action('init', 'wpconfig_register_work_type_taxonomy');Таксономия будет доступна в админке и на фронтенде для фильтрации и сортировки.
Вывод Custom Post Type на сайте с использованием WP_Query
Чтобы вывести записи CPT на фронтенде, удобно использовать класс WP_Query. Пример вывода последних 5 работ из портфолио:
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => 5,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul class="portfolio-list">';
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>';
}Такой код можно вставить в шаблон темы, шорткод или виджет.
Полезные плагины для работы с Custom Post Types
Если не хочется писать код, можно использовать плагины, которые упрощают создание и настройку CPT:
- Toolset Types — мощный инструмент для создания CPT, таксономий и кастомных полей.
- Advanced Custom Fields Pro — для создания удобных и мощных полей для CPT.
- Custom Post Type UI — простой интерфейс для регистрации CPT и таксономий без кода.
Советы по работе с Custom Post Types
При разработке CPT важно продумать структуру и назначение, чтобы не создавать избыточный контент и не усложнять админку.
Не забудьте настроить права доступа, если нужно ограничить возможность добавления или редактирования для определённых ролей.
Для SEO рекомендуется создать отдельные шаблоны для CPT (single-{post_type}.php, archive-{post_type}.php) и правильно настроить мета-теги.
Также стоит учитывать, что при смене темы или отключении плагина с кодом CPT записи не будут отображаться, поэтому лучше хранить код CPT в отдельном плагине или child-теме.