Кастомные типы записей (Custom Post Types) — один из самых мощных инструментов WordPress для расширения возможностей сайта. Они позволяют создавать не просто записи и страницы, а любые другие типы контента, например, портфолио, отзывы, товары, мероприятия и многое другое. В этой статье разберём, как добавить кастомные типы записей в WordPress с помощью кода и плагинов, а также как их правильно настроить и использовать.
Что такое кастомные типы записей и зачем они нужны
По умолчанию WordPress работает с двумя основными типами записей: posts (записи) и pages (страницы). Однако для создания более сложных и специализированных сайтов этого недостаточно. Кастомные типы записей позволяют:
- Структурировать контент по специфическим категориям.
- Отделять разные виды контента друг от друга в админ-панели.
- Настраивать отдельные шаблоны отображения для каждого типа.
- Использовать различные таксономии, мета-поля и возможности для каждого типа.
Например, если вы создаёте сайт для агентства недвижимости, логично добавить кастомный тип записей property с уникальными полями — цена, адрес, площадь и т.д.
Создание кастомного типа записи с помощью кода
Для регистрации кастомного типа записи используется функция register_post_type(). Обычно её добавляют в файл functions.php темы или в отдельный плагин. Рассмотрим пример создания типа записи wpedu_portfolio для сайта wpshop.ru:
function wpedu_register_cpt_portfolio() {
$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', 'comments'),
'show_in_rest' => true, // для поддержки Gutenberg
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
);
register_post_type('wpedu_portfolio', $args);
}
add_action('init', 'wpedu_register_cpt_portfolio');
В этом коде:
labels— массив для удобства администрирования.public— тип записи виден на фронтенде и в админке.has_archive— включение архивной страницы.rewrite— настройка ЧПУ.supports— поддерживаемые возможности (заголовок, редактор, миниатюра, отрывок, комментарии).show_in_rest— активация поддержки API и редактора Gutenberg.menu_icon— иконка в меню админки.
Добавление мета-полей к кастомному типу записи
Кастомные мета-поля расширяют содержимое каждой записи, позволяя хранить дополнительную информацию. Например, добавим поле "Дата проекта" для типа wpedu_portfolio. Самый простой способ — использовать хук add_meta_boxes и сохранить данные через save_post:
function wpedu_add_meta_box_portfolio_date() {
add_meta_box(
'wpedu_portfolio_date',
'Дата проекта',
'wpedu_render_portfolio_date_meta_box',
'wpedu_portfolio',
'side',
'default'
);
}
add_action('add_meta_boxes', 'wpedu_add_meta_box_portfolio_date');
function wpedu_render_portfolio_date_meta_box($post) {
wp_nonce_field('wpedu_portfolio_date_nonce', 'wpedu_portfolio_date_nonce_field');
$value = get_post_meta($post->ID, '_wpedu_portfolio_date', true);
echo '<input type="date" name="wpedu_portfolio_date" value="' . esc_attr($value) . '" />';
}
function wpedu_save_portfolio_date_meta_box($post_id) {
if (!isset($_POST['wpedu_portfolio_date_nonce_field']) || !wp_verify_nonce($_POST['wpedu_portfolio_date_nonce_field'], 'wpedu_portfolio_date_nonce')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['wpedu_portfolio_date'])) {
update_post_meta($post_id, '_wpedu_portfolio_date', sanitize_text_field($_POST['wpedu_portfolio_date']));
}
}
add_action('save_post', 'wpedu_save_portfolio_date_meta_box');
Так мы добавили в редактор портфолио поле для выбора даты, которую можно использовать на фронтенде.
Использование плагинов для создания кастомных типов записей
Если вы не хотите писать код вручную, можно воспользоваться плагинами. Наиболее популярные:
- Custom Post Type UI — простой и удобный интерфейс для создания и управления типами записей и таксономиями.
- Pods — мощный инструмент для создания кастомных типов, таксономий и мета-полей с расширенными возможностями.
- Advanced Custom Fields (ACF) — позволяет создавать удобные интерфейсы для мета-полей и использовать их с кастомными типами.
Например, с помощью Custom Post Type UI вы можете быстро настроить тип записи, а затем с ACF добавить мета-поля. Такой подход удобен, когда нужно быстро развернуть сайт без глубокого погружения в код.
Особенности настройки и интеграции
При работе с плагинами обратите внимание:
- Регулярно обновляйте плагины и проверяйте совместимость с вашей версией WordPress.
- Если планируете смену темы, убедитесь, что кастомные типы записей и мета-поля сохранятся — лучше делать это через плагин, а не функции темы.
- Для SEO и отображения используйте специализированные шаблоны: создайте файлы
single-wpedu_portfolio.phpиarchive-wpedu_portfolio.phpв вашей теме.
Вывод кастомных типов записей на фронтенде
Чтобы вывести записи кастомного типа на сайте, используют WP_Query с параметром post_type. Пример вывода последних 5 проектов портфолио:
$args = array(
'post_type' => 'wpedu_portfolio',
'posts_per_page' => 5,
);
$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> — ' . get_the_date() . '</li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo 'Проекты не найдены.';
}
Если вы добавили мета-поля (например, дату проекта), их можно вывести так:
$portfolio_date = get_post_meta(get_the_ID(), '_wpedu_portfolio_date', true);
echo '<p>Дата проекта: ' . esc_html($portfolio_date) . '</p>';
Создание шаблонов для кастомного типа записи
Для полного контроля над выводом создайте файлы в теме:
single-wpedu_portfolio.php— шаблон для отдельной записи типа портфолио.archive-wpedu_portfolio.php— шаблон для архивной страницы этого типа.
В этих файлах вы можете полностью настроить HTML, использовать циклы WordPress, выводить мета-поля и подключать дополнительные стили и скрипты.
Советы и лучшие практики по работе с кастомными типами записей
При добавлении кастомных типов записей учитывайте следующие моменты:
- Уникальные имена: используйте префиксы для функций и названий, чтобы избежать конфликтов. В нашем случае префикс
wpedu_. - Поддержка REST API: включайте
show_in_rest => trueдля совместимости с Gutenberg и внешними сервисами. - Оптимизация запросов: не забывайте использовать
wp_reset_postdata()после кастомных циклов, чтобы не нарушить глобальный запрос. - Безопасность: при работе с мета-полями используйте nonce и проверяйте права пользователя при сохранении данных.
- Легкость управления: если проект большой, лучше использовать плагины для управления кастомными типами и мета-полями.
Пример использования кастомного типа записи и плагина Clearfy Pro
Плагин Clearfy Pro помогает оптимизировать работу сайта и управлять кастомными типами записей, отключая ненужные типы или расширяя функционал. Например, вы можете быстро отключить стандартные типы записей, которые не используете, чтобы повысить производительность.
Также Clearfy Pro улучшает SEO и безопасность, что важно при работе с кастомным контентом.