В WordPress базовые записи представлены стандартными типами: записи (posts) и страницы (pages). Но часто для проектов требуется более гибкая организация контента — например, товары, портфолио, отзывы, события и так далее. Для этого в WordPress предусмотрена возможность создавать собственные типы записей (Custom Post Types, CPT). В этой статье мы подробно разберём, как правильно создать и настроить свой CPT, чтобы организовать контент максимально удобно и с учётом всех технических нюансов.
Что такое собственный тип записи и зачем он нужен
Собственный тип записи — это пользовательский контент, который отличается от стандартных записей и страниц по назначению и структуре. Например, если у вас сайт компании и помимо блога есть каталог сотрудников, то можно создать CPT «Сотрудники» с отдельным интерфейсом в админке и уникальными полями. Это позволяет:
- Разграничить разные виды контента.
- Упростить управление и вывод информации.
- Настроить отдельные шаблоны для отображения.
- Оптимизировать SEO по целевым запросам.
Создание CPT — базовый навык для разработчика, который позволяет расширять функциональность сайта без сложных плагинов.
Регистрация собственного типа записи: базовый пример
Для регистрации CPT используется функция register_post_type(). Лучше всего добавить код в файл functions.php вашей темы или в отдельный плагин. Пример регистрации типа записи «Проекты»:
function wpcorp_register_cpt_projects() {
$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' => 'projects'),
'show_in_rest' => true, // включаем поддержку Gutenberg
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
'capability_type' => 'post',
);
register_post_type('wpcorp_projects', $args);
}
add_action('init', 'wpcorp_register_cpt_projects');
Обратите внимание, что префикс wpcorp_ в названии функции и типа записи помогает избежать конфликтов с другими плагинами и темами.
Параметры регистрации CPT: что важно учитывать
Разберём ключевые параметры массива $args подробнее:
- public — доступность типа записи на фронтенде и в админке.
- has_archive — включение архивной страницы для типа записи.
- rewrite — настройки ЧПУ (человеко-понятного URL). Можно задать slug, чтобы адреса выглядели как
site.ru/projects/project-name. - supports — список элементов, которые поддерживаются (заголовок, редактор, миниатюры, отзывы и т.д.).
- show_in_rest — обязательный параметр для поддержки редактора Gutenberg и REST API.
- menu_icon — иконка в меню админки, выбирайте из Dashicons.
Правильная настройка этих параметров — залог удобства для администраторов и корректного отображения на сайте.
Добавление пользовательских таксономий к CPT
Для удобной категоризации проектов можно добавить собственные таксономии — например, «Тип проекта» или «Технологии». Это аналог рубрик и меток, но для вашего CPT.
function wpcorp_register_taxonomies() {
register_taxonomy('project_type', 'wpcorp_projects', array(
'labels' => array(
'name' => 'Типы проектов',
'singular_name' => 'Тип проекта',
'search_items' => 'Поиск типов проектов',
'all_items' => 'Все типы проектов',
'edit_item' => 'Редактировать тип проекта',
'add_new_item' => 'Добавить новый тип проекта',
),
'hierarchical' => true, // как категории
'show_in_rest' => true,
'rewrite' => array('slug' => 'project-type'),
));
}
add_action('init', 'wpcorp_register_taxonomies');
Теперь на странице редактирования проекта появится метабокс для выбора типа проекта.
Вывод данных собственного типа записи на сайте
Чтобы вывести список проектов на странице, можно использовать WP_Query с указанием типа записи:
$args = array(
'post_type' => 'wpcorp_projects',
'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 'Проекты не найдены';
}
Такой подход гибок и позволяет создавать любые страницы с кастомным контентом.
Советы по SEO и производительности для собственных типов записей
Для повышения SEO-эффективности CPT рекомендуется:
- Использовать ЧПУ с осмысленными slug — это важно для индексации.
- Добавлять мета-описания и заголовки через SEO-плагины (например, SEO by WPCorp).
- Оптимизировать запросы с помощью правильных аргументов WP_Query.
- Подключать к CPT XML-карты сайта и открывать индексацию для поисковиков.
Для очистки и оптимизации базы данных, связанной с CPT, можно использовать плагин Clearfy Pro, который помогает убрать мусор и ускорить работу сайта.
Дополнительно: создание шаблонов для собственного типа записи
Чтобы отображать проекты с уникальным дизайном, создайте файл шаблона в теме с именем single-wpcorp_projects.php для отдельной записи и archive-wpcorp_projects.php для архива. В этих файлах можно использовать обычные функции WordPress для вывода полей, например:
<?php
if(have_posts()) :
while(have_posts()) : the_post();
the_title('<h1>', '</h1>');
the_content();
// Вывод миниатюры
if(has_post_thumbnail()) {
the_post_thumbnail('large');
}
endwhile;
endif;
?>
Так вы получите полный контроль над видом страниц с вашим CPT.
Использование плагинов для упрощения работы с CPT
Если вы не хотите писать код, можно использовать плагины типа Custom Post Type UI или Toolset. Однако для максимальной производительности и гибкости лучше писать регистрацию CPT вручную. Это также облегчает перенос и поддержку проекта.
Для более продвинутых задач можно использовать плагин Expert Review от WPSHOP, который помогает создавать расширенные поля и настраивать вывод контента.