Произвольные типы постов (Custom Post Types, CPT) — мощный инструмент WordPress, позволяющий расширить функциональность сайта за пределы стандартных записей и страниц. С их помощью можно создавать специализированные разделы, например, портфолио, отзывы, товары и многое другое.
Что такое произвольные типы постов и зачем они нужны
По умолчанию WordPress работает с двумя основными типами содержимого: записи (post) и страницы (page). Однако часто бывает необходимо добавить новые типы контента с уникальными свойствами и отображением. Например, если вы ведёте сайт агентства, вам может понадобиться тип поста «Проекты», где каждая запись будет содержать отдельный проект с описанием, датами и изображениями.
Создание CPT позволяет структурировать контент, упростить его управление в админке и вывести на фронтенде так, как нужно. Кроме того, CPT интегрируются с таксономиями, метаданными и другими возможностями WordPress.
Регистрация произвольного типа поста через functions.php
Самый распространённый способ добавить CPT — использовать функцию register_post_type(). Обычно код размещают в файле functions.php вашей темы или в отдельном плагине.
Рассмотрим пример регистрации CPT «Проекты».
function wpsetup_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',
'taxonomies' => array('category', 'post_tag')
);
register_post_type('wpsetup_project', $args);
}
add_action('init', 'wpsetup_register_cpt_projects');В этом примере мы создали CPT с ярлыком wpsetup_project. В админке появится новый пункт меню «Проекты» с удобным интерфейсом для добавления и редактирования.
Подключение таксономий к произвольному типу постов
Для лучшей организации контента часто требуется добавить к CPT собственные таксономии или использовать стандартные категории и метки.
Добавление стандартных категорий и меток
В примере выше к CPT подключены стандартные таксономии 'category' и 'post_tag'. Это позволит использовать привычное разбиение на категории и теги.
Создание собственной таксономии
Если необходимо создать уникальную таксономию, например, «Тип проекта», можно использовать функцию register_taxonomy():
function wpsetup_register_taxonomy_project_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' => 'project-type'),
'show_in_rest' => true
);
register_taxonomy('wpsetup_project_type', array('wpsetup_project'), $args);
}
add_action('init', 'wpsetup_register_taxonomy_project_type');После регистрации таксономии она появится в редакторе «Проектов» и позволит гибко классифицировать записи.
Вывод произвольных типов постов на фронтенде
Чтобы вывести список проектов на сайте, можно создать файл шаблона archive-wpsetup_project.php в вашей теме. В этом файле используйте стандартный цикл WordPress:
<?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>
<p><?php the_excerpt(); ?></p>
</li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p>Проекты не найдены.</p>
<?php endif; ?>
<?php get_footer(); ?>Так вы получите простую страницу архива с перечнем всех записей CPT.
Использование плагинов для создания произвольных типов постов
Если вы не хотите писать код вручную, можно использовать плагины с удобным интерфейсом:
- Custom Post Type UI — популярный плагин для создания CPT и таксономий без кода.
- Toolset Types — мощный инструмент для создания кастомных типов записей и полей.
Однако для легковесности и точного контроля рекомендуется писать регистрацию CPT вручную, особенно если вы разработчик.
Практические советы и частые ошибки при работе с CPT
При работе с произвольными типами постов помните:
- Используйте уникальный префикс для названий функций и ярлыков, чтобы избежать конфликтов с плагинами и темами. В примерах мы использовали
wpsetup_. - Обязательно регистрируйте CPT и таксономии на хук
init, чтобы WordPress корректно их распознал. - Если CPT должны поддерживать редактор Gutenberg, включайте параметр
show_in_rest = true. - Не забывайте создавать шаблоны для отображения CPT на сайте, чтобы вывести их в нужном виде.
- При изменении параметров CPT или таксономий не забудьте обновить постоянные ссылки в админке через «Настройки — Постоянные ссылки».
Заключение
Произвольные типы постов — это базовый инструмент для построения кастомных сайтов на WordPress. Они позволяют структурировать контент и создавать уникальные разделы без избыточных плагинов. Используйте приведённые примеры кода, чтобы быстро начать работу и адаптировать их под свои задачи.
Для удобного создания CPT без кода рекомендуем попробовать плагин Custom Post Type UI от WPSHOP.