WordPress изначально работает с несколькими типами содержимого — посты, страницы, вложения. Но часто стандартных типов недостаточно для реализации уникальных задач сайта. Здесь на помощь приходят собственные типы записей (Custom Post Types, CPT). В этой статье подробно разберём, как правильно создавать, настраивать и использовать CPT, чтобы расширить функционал вашего сайта на WordPress.
Что такое собственные типы записей и зачем они нужны
Собственные типы записей — это возможность создавать новые структуры контента, отличные от стандартных «пост» и «страница». Например, если вы ведёте сайт с обзорами фильмов, удобно создать тип записи «Фильм» с отдельными полями и таксономиями. Это структурирует контент и упрощает управление.
Использование CPT позволяет:
- Логически разделять разные виды контента на сайте.
- Применять отдельные метаданные и таксономии.
- Улучшать SEO за счёт более точной структуры.
- Упрощать создание шаблонов для вывода уникального контента.
В WP-Team вы можете создавать CPT для любых целей — портфолио, кейсы, мероприятия, товары и многое другое.
Как зарегистрировать собственный тип записи в WordPress
Для создания CPT используем функцию register_post_type(), которую нужно вызывать на хуке init. Важный момент — использовать префиксы в названиях функций и переменных, чтобы не было конфликтов с другими плагинами и темами. В нашем случае добавим префикс wpteam_.
Рассмотрим пример создания CPT «Кейсы» (cases):
function wpteam_register_post_type_cases() {
$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' => 'cases'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true, // поддержка Gutenberg
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
);
register_post_type('cases', $args);
}
add_action('init', 'wpteam_register_post_type_cases');После добавления этого кода в файл functions.php вашей темы или в плагин функционала, в админке WordPress появится новый раздел «Кейсы».
Подробности параметров
Параметр supports отвечает за функционал редактора и мета-полей. Вы можете добавлять или убирать элементы, например, комментарии, автор, страницы аттачментов. Параметр show_in_rest нужен, чтобы CPT поддерживался в новом редакторе Gutenberg и REST API.
Добавление пользовательских таксономий к типу записи
Для удобной категоризации CPT полезно добавить собственные таксономии. В нашем примере создадим таксономию «Тип кейса» (case_type), которая будет работать как рубрики.
function wpteam_register_taxonomy_case_type() {
$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_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'case-type'),
'show_in_rest' => true,
);
register_taxonomy('case_type', array('cases'), $args);
}
add_action('init', 'wpteam_register_taxonomy_case_type');Теперь при добавлении или редактировании кейса можно будет выбрать или создать тип кейса.
Вывод собственных типов записей на фронтенде
Чтобы вывести список кейсов на сайте, можно использовать WP_Query с указанием типа записи:
$args = array(
'post_type' => 'cases',
'posts_per_page' => 10,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
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 'Кейсы не найдены';
}Для более удобного вывода под CPT можно создать отдельный шаблон архива archive-cases.php и шаблон одиночной записи single-cases.php в папке темы. Это позволит полностью контролировать дизайн и структуру страниц кейсов.
Расширение возможностей: добавление мета-полей для собственного типа записи
Часто нужно хранить дополнительные данные, например, ссылку на проект, дату завершения, заказчика. Для этого используют мета-поля. Их добавляют через add_meta_box() и сохраняют через хук save_post.
Пример добавления мета-бокса с полем «Заказчик» для кейсов:
function wpteam_add_meta_box_case_client() {
add_meta_box(
'wpteam_case_client',
'Заказчик',
'wpteam_case_client_meta_box_callback',
'cases',
'side',
'default'
);
}
add_action('add_meta_boxes', 'wpteam_add_meta_box_case_client');
function wpteam_case_client_meta_box_callback($post) {
wp_nonce_field('wpteam_save_case_client_data', 'wpteam_case_client_nonce');
$value = get_post_meta($post->ID, '_wpteam_case_client', true);
echo '<label for="wpteam_case_client_field">Имя заказчика:</label>';
echo '<input type="text" id="wpteam_case_client_field" name="wpteam_case_client_field" value="' . esc_attr($value) . '" size="25" />';
}
function wpteam_save_case_client_data($post_id) {
if (!isset($_POST['wpteam_case_client_nonce'])) {
return;
}
if (!wp_verify_nonce($_POST['wpteam_case_client_nonce'], 'wpteam_save_case_client_data')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
if (!isset($_POST['wpteam_case_client_field'])) {
return;
}
$client_data = sanitize_text_field($_POST['wpteam_case_client_field']);
update_post_meta($post_id, '_wpteam_case_client', $client_data);
}
add_action('save_post', 'wpteam_save_case_client_data');Теперь на странице редактирования кейса будет поле для ввода заказчика, а данные сохранятся в базе.
Использование плагинов для создания и управления CPT
Если не хотите писать код, можно использовать плагины для CPT. Вот несколько популярных и удобных:
- Custom Post Type UI — простой интерфейс для создания CPT и таксономий без кода.
- Advanced Custom Fields Pro — для создания сложных мета-полей и их вывода.
- Clearfy Pro — оптимизация и расширение возможностей WordPress, в том числе по CPT.
Комбинируя эти плагины, можно быстро и гибко организовать контент для сайта без глубоких знаний программирования.
Советы и лучшие практики при работе с собственными типами записей
При создании CPT обратите внимание на следующие моменты:
- Используйте уникальные и логичные имена для типа записи и таксономий, чтобы избежать конфликтов.
- Всегда добавляйте поддержку REST API (
show_in_rest), чтобы обеспечить совместимость с Gutenberg и современными инструментами. - Создавайте отдельные шаблоны для CPT, чтобы не ломать дизайн сайта и улучшить SEO.
- Подключайте мета-поля по необходимости, не перегружайте админку лишними полями.
- Тестируйте работу CPT на локальной копии сайта перед развертыванием.
Следуя этим рекомендациям, вы создадите удобный и масштабируемый инструмент для управления контентом на WordPress.