В WordPress по умолчанию есть несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и некоторые другие. Но часто для реализации конкретных задач требуется создать собственный тип записи — Custom Post Type (CPT). Например, вы хотите вести каталог товаров, портфолио, отзывы, события или что-то своё, что будет отличаться от обычных постов.
Что такое собственный тип записи и зачем он нужен
Собственный тип записи — это отдельная сущность в базе данных WordPress, которая позволяет структурировать контент по-разному. Благодаря CPT можно создать отдельный раздел в админке, отдельные архивы и шаблоны для отображения на сайте.
Основные преимущества использования CPT:
- Разделение контента по темам для удобства управления.
- Возможность создавать уникальные мета-поля и таксономии.
- Улучшение навигации и SEO благодаря структурированным URL.
- Удобство работы с шаблонами в теме.
Без CPT часто приходится использовать категории и теги, что не всегда удобно и логично.
Регистрация собственного типа записи с помощью кода в functions.php
Самый простой способ — добавить функцию регистрации CPT в файл functions.php вашей темы или в файл своего плагина. Ниже пример функции для создания типа записи «Проекты».
function wpnotes_register_custom_post_type_projects() {
$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' => 'projects'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
);
register_post_type('wpnotes_projects', $args);
}
add_action('init', 'wpnotes_register_custom_post_type_projects');Обратите внимание, что префикс wpnotes_ добавлен к названию типа записи, чтобы избежать конфликтов с другими CPT.
После добавления функции и обновления сайта в админке появится новый пункт меню «Проекты» с возможностью создавать и редактировать записи этого типа.
Настройка таксономий для собственного типа записи
Чтобы структурировать записи CPT, часто нужны собственные таксономии (категории, метки, или свои варианты). Например, для проектов можно создать таксономию «Тип проекта».
Для этого воспользуемся функцией register_taxonomy. Пример добавления таксономии:
function wpnotes_register_taxonomy_project_type() {
$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' => 'project-type'),
);
register_taxonomy('wpnotes_project_type', array('wpnotes_projects'), $args);
}
add_action('init', 'wpnotes_register_taxonomy_project_type');Теперь при добавлении и редактировании проектов можно будет назначать им типы.
Использование популярных плагинов для создания CPT
Если не хотите писать код, можно использовать плагины, которые создают типы записи через удобный интерфейс.
Рассмотрим два популярных решения:
- Custom Post Type UI — позволяет быстро создавать CPT и таксономии с настройками без кода. Отлично подходит для новичков.
- Toolset Types — более продвинутый плагин с возможностью создавать связи между типами записи, метаполя и вывод контента.
Плагин Custom Post Type UI добавляет в админку интерфейс, где вы задаёте название, ярлык, настройки отображения и так далее. После создания CPT остаётся только разработать шаблоны темы для вывода нового контента.
Создание шаблонов для собственного типа записи
Для правильного отображения CPT на сайте нужно создать шаблоны в теме. WordPress ищет файлы по определённому приоритету. Для CPT с названием wpnotes_projects можно создать:
single-wpnotes_projects.php— шаблон для одиночной записи.archive-wpnotes_projects.php— шаблон архива (списка всех проектов).
В этих файлах можно использовать стандартные функции WordPress для вывода заголовков, содержимого, таксономий и метаполей.
Пример простого файла single-wpnotes_projects.php:
<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="content"><?php the_content(); ?></div>
<div class="project-type">Тип проекта: <?php echo get_the_term_list(get_the_ID(), 'wpnotes_project_type', '', ', ', ''); ?></div>
<?php endwhile; endif; ?>
<?php get_footer(); ?>Советы и лучшие практики при работе с CPT
При создании собственных типов записи стоит помнить несколько важных моментов:
- Используйте уникальные префиксы для имён CPT и таксономий, чтобы избежать конфликтов с другими плагинами и темами.
- Регистрируйте CPT и таксономии на хуке
init, чтобы они корректно работали и были доступны на всех этапах загрузки WordPress. - Настраивайте аргументы
supportsвregister_post_typeпо необходимости, чтобы включить нужные поля (например, миниатюры, редактор, комментарии). - Не забывайте создавать шаблоны в теме для отображения новых типов записей.
- Если планируете переносить CPT между сайтами, создавайте отдельный плагин с регистрацией, а не только код в теме.
Заключение
Добавление собственного типа записи в WordPress — мощный способ структурировать и расширять сайт под любые задачи. Используя приведённые выше примеры, вы легко можете создать CPT, настроить для него таксономии, и вывести контент с помощью кастомных шаблонов. Это значительно улучшит удобство управления сайтом и позволит создавать уникальный функционал без сложных доработок.