Собственные типы записей (Custom Post Types) в WordPress позволяют расширить функциональность сайта, добавляя новые виды содержимого, отличные от стандартных «Записей» и «Страниц». Например, вы можете создать тип записи для портфолио, отзывов, событий или товаров. В этой статье разберём, как правильно добавить собственный тип записи на сайт с помощью кода и популярных плагинов, а также как с ним работать.
Что такое собственный тип записи и зачем он нужен
Стандартный WordPress предлагает два основных типа контента: записи (posts) и страницы (pages). Однако для многих проектов этого недостаточно. Собственные типы записей позволяют структурировать контент более гибко, создавая отдельные разделы сайта с уникальными возможностями.
Например, если вы ведёте сайт агентства и хотите публиковать кейсы, удобнее сделать их отдельным типом записи, чтобы отделить от блоговых новостей, а также задать уникальные таксономии, метаданные и шаблоны отображения.
Создание собственного типа записи поможет:
- Организовать контент по смыслу и функционалу;
- Упростить управление и редактирование;
- Настроить отображение в админке и на фронтенде;
- Использовать отдельные метаданные и таксономии.
Регистрация собственного типа записи через functions.php
Самый распространённый способ добавить собственный тип записи — использовать функцию wpset_register_custom_post_type(), которую мы определим в файле темы functions.php. Ниже пример кода для создания типа записи «Кейсы» (portfolio):
function wpset_register_custom_post_type() {
$labels = array(
'name' => 'Кейсы',
'singular_name' => 'Кейс',
'menu_name' => 'Кейсы',
'name_admin_bar' => 'Кейс',
'add_new' => 'Добавить кейс',
'add_new_item' => 'Добавить новый кейс',
'new_item' => 'Новый кейс',
'edit_item' => 'Редактировать кейс',
'view_item' => 'Просмотреть кейс',
'all_items' => 'Все кейсы',
'search_items' => 'Искать кейсы',
'parent_item_colon' => '',
'not_found' => 'Кейсы не найдены.',
'not_found_in_trash' => 'Кейсы не найдены в корзине.'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'case'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
'show_in_rest' => true
);
register_post_type('wpset_case', $args);
}
add_action('init', 'wpset_register_custom_post_type');В этом коде мы создали тип записи с названием wpset_case, который будет отображаться в админке под именем «Кейсы». Параметры supports определяют, какие стандартные поля будут доступны (заголовок, редактор, миниатюра и т.д.).
Обратите внимание на параметр show_in_rest: он включает поддержку редактора Gutenberg для типа записи.
Пояснения к основным параметрам
- labels — массив с надписями, показываемыми в интерфейсе админки;
- public — тип записи будет доступен на сайте и в админке;
- rewrite — настраивает структуру URL;
- has_archive — включает архивный список записей данного типа;
- supports — какие поля и возможности доступны для записи;
- show_in_rest — поддержка REST API и редактора Gutenberg.
Использование плагинов для создания собственных типов записей
Если вы не хотите работать с кодом, есть несколько удобных плагинов, которые позволят создать и настроить собственный тип записи через визуальный интерфейс:
1. Custom Post Type UI
Один из самых популярных и простых плагинов для создания типов записей и таксономий. Позволяет быстро зарегистрировать новый тип записи, задать метки, параметры, а также экспортировать настройки в код.
Преимущества:
- Простота и удобство;
- Поддержка кастомных таксономий;
- Возможность экспорта и импорта настроек;
- Регулярные обновления и поддержка.
2. Toolset Types
Более мощный инструмент, который позволяет создавать не только типы записей, но и настраивать поля, связи между ними, шаблоны вывода.
Этот плагин хорош для сложных проектов с большим количеством взаимосвязанных данных.
Добавление таксономий для собственного типа записи
Часто вместе с типом записи нужно добавить и свои таксономии — категории, метки или пользовательские. Рассмотрим пример регистрации пользовательской таксономии «Тип кейса» для созданного выше типа записи:
function wpset_register_custom_taxonomy() {
$labels = array(
'name' => 'Типы кейсов',
'singular_name' => 'Тип кейса',
'search_items' => 'Искать типы кейсов',
'all_items' => 'Все типы кейсов',
'parent_item' => 'Родительский тип',
'parent_item_colon' => 'Родительский тип:',
'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('wpset_case_type', array('wpset_case'), $args);
}
add_action('init', 'wpset_register_custom_taxonomy');В результате в админке для типа записи «Кейсы» появится отдельный раздел «Типы кейсов», где можно создавать и назначать категории.
Вывод собственного типа записи на фронтенде
Для отображения записей нового типа на сайте нужно создать шаблоны. WordPress автоматически ищет файлы шаблонов с названием single-{post_type}.php для одиночных записей и archive-{post_type}.php для архивов.
Для типа записи wpset_case создайте в папке темы файлы:
single-wpset_case.php— шаблон одиночного кейса;archive-wpset_case.php— шаблон списка всех кейсов.
Пример простого цикла вывода на странице архива:
<?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(); ?>Добавление мета-полей к собственному типу записи
Иногда стандартных полей недостаточно, и нужны дополнительные данные в виде мета-полей. Для их создания можно использовать:
- Ручное добавление через функции
add_meta_boxи сохранение данных через хуки. - Плагины, например Advanced Custom Fields (ACF), для визуального создания полей.
Пример добавления мета-бокса с полем «Клиент» для кейса:
function wpset_add_meta_box() {
add_meta_box(
'wpset_case_client',
'Клиент',
'wpset_case_client_meta_box_callback',
'wpset_case',
'side',
'default'
);
}
add_action('add_meta_boxes', 'wpset_add_meta_box');
function wpset_case_client_meta_box_callback($post) {
wp_nonce_field('wpset_case_save_meta_box_data', 'wpset_case_meta_box_nonce');
$value = get_post_meta($post->ID, '_wpset_case_client', true);
echo '<label for="wpset_case_client_field">Имя клиента: </label>';
echo '<input type="text" id="wpset_case_client_field" name="wpset_case_client_field" value="' . esc_attr($value) . '" size="25" />';
}
function wpset_case_save_meta_box_data($post_id) {
if (!isset($_POST['wpset_case_meta_box_nonce'])) {
return;
}
if (!wp_verify_nonce($_POST['wpset_case_meta_box_nonce'], 'wpset_case_save_meta_box_data')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['wpset_case_client_field'])) {
$client_data = sanitize_text_field($_POST['wpset_case_client_field']);
update_post_meta($post_id, '_wpset_case_client', $client_data);
}
}
add_action('save_post', 'wpset_case_save_meta_box_data');Теперь при редактировании кейса появится дополнительное поле для ввода имени клиента, данные которого сохраняются и могут использоваться на сайте.
Вывод мета-полей в шаблонах
Чтобы вывести значение мета-поля в шаблоне одиночной записи, используйте функцию get_post_meta:
<?php
$client = get_post_meta(get_the_ID(), '_wpset_case_client', true);
if ($client) {
echo '<p><strong>Клиент:</strong> ' . esc_html($client) . '</p>';
}
?>Это позволит показывать дополнительную информацию в удобном формате.
Итоги и рекомендации
Создание собственных типов записей — мощный инструмент для кастомизации WordPress. Главное — тщательно продумывать структуру, чтобы контент был понятным и удобным для управления. Используйте регистрацию через код для стабильности и контроля и плагины для быстрой настройки и тестирования.
Не забывайте про создание шаблонов и добавление мета-полей для расширения возможностей. Такой подход позволит сделать сайт профессиональным и функциональным.