Как создать собственный тип записи (Custom Post Type) в WordPress с примером кода

Создание собственного типа записи (Custom Post Type, CPT) — это мощный инструмент для расширения функционала WordPress. Вместо того чтобы использовать стандартные записи или страницы, вы можете добавить уникальные типы контента, например, портфолио, отзывы, мероприятия или товары. В этой статье мы подробно разберем, как создать CPT с помощью кода, рассмотрим основные параметры и дадим практические советы.

Что такое Custom Post Type и зачем он нужен

WordPress изначально поддерживает несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и некоторые другие. Однако для многих проектов этого бывает недостаточно. Custom Post Type позволяет создать свой тип контента с уникальными свойствами и логикой вывода.

Например, если вы разрабатываете сайт агентства и хотите добавить раздел «Проекты», где будут отображаться законченные работы, то создание CPT «Проекты» будет логичным решением. Это позволит легко отделить их от обычных записей блога и упростит управление контентом.

Кроме того, CPT можно использовать для интеграции с плагинами и темами, которые поддерживают их. Это расширяет возможности сайта и улучшает удобство работы для администраторов.

Регистрация собственного типа записи — базовый пример

Для регистрации CPT используется функция register_post_type(), которую нужно вызвать в хуке init. Ниже пример минимального кода для создания CPT с названием «portfolio» (портфолио):

function wpbuy_register_post_type_portfolio() {
    $labels = array(
        'name'               => 'Портфолио',
        'singular_name'      => 'Проект',
        'add_new'            => 'Добавить проект',
        'add_new_item'       => 'Добавить новый проект',
        'edit_item'          => 'Редактировать проект',
        'new_item'           => 'Новый проект',
        'all_items'          => 'Все проекты',
        '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'),
        'show_in_rest'       => true, // поддержка Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
    );

    register_post_type('portfolio', $args);
}
add_action('init', 'wpbuy_register_post_type_portfolio');

Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. После активации CPT появится в админ-панели WordPress в меню «Портфолио».

Подробный разбор параметров register_post_type

Параметры в массиве $args позволяют гибко настроить поведение CPT:

  • public — доступен ли тип записи публично (на сайте и в админке). Обычно ставим true.
  • has_archive — включить ли архивный список для CPT. Если true, то по адресу /portfolio/ будет архив проектов.
  • rewrite — настройки ЧПУ (человеко-понятных URL). Можно указать свой slug.
  • show_in_rest — обязательно для поддержки редактора Gutenberg и REST API.
  • supports — массив поддерживаемых функций: заголовок, редактор, миниатюры и др.
  • menu_icon — иконка в меню админки (используются dashicons).
  • menu_position — позиция в меню, чтобы CPT не потерялся.

Эти и другие параметры вы найдете в официальной документации WordPress. Их грамотная настройка влияет на удобство работы с типом записи.

Добавление пользовательских полей и таксономий к CPT

Часто CPT используют вместе с пользовательскими полями (Custom Fields) и таксономиями (категории, метки). Например, для портфолио можно добавить поле «Год разработки» и таксономию «Тип проекта».

Для регистрации пользовательских таксономий используйте функцию register_taxonomy(). Пример добавления таксономии «Тип проекта» к CPT «portfolio»:

function wpbuy_register_taxonomy_project_type() {
    $labels = array(
        'name'              => 'Типы проектов',
        'singular_name'     => 'Тип проекта',
        'search_items'      => 'Искать типы проектов',
        'all_items'         => 'Все типы проектов',
        'edit_item'         => 'Редактировать тип проекта',
        'add_new_item'      => 'Добавить новый тип проекта',
        '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('project_type', array('portfolio'), $args);
}
add_action('init', 'wpbuy_register_taxonomy_project_type');

Для пользовательских полей можно использовать мета-боксы или плагины, например, Advanced Custom Fields (ACF), который значительно упрощает создание и управление мета-данными.

Вывод Custom Post Type на сайте — примеры шаблонов и запросов

Для вывода CPT на сайте создайте шаблон archive-portfolio.php для архива и single-portfolio.php для отдельной записи. Это позволит кастомизировать внешний вид.

Пример простого цикла для вывода CPT в шаблоне:

<?php
$args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => 10,
);
$query = new WP_Query($args);

if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post(); ?>

        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div><?php the_excerpt(); ?></div>

    <?php endwhile;
    wp_reset_postdata();
else :
    echo '<p>Проекты не найдены.</p>';
endif;
?>

Для вывода пользовательских полей используйте функции get_post_meta() или интегрируйтесь с ACF.

Полезные плагины для работы с Custom Post Types

Хотя кодовое создание CPT дает полный контроль, существуют удобные плагины, которые позволяют создавать и управлять типами записей без программирования:

  • Types — Toolset — мощный конструктор CPT, таксономий и пользовательских полей.
  • Custom Post Type UI — простой и популярный плагин для создания CPT и таксономий.
  • Advanced Custom Fields Pro — для создания сложных пользовательских полей.

В некоторых случаях удобнее использовать плагины, особенно если вы не хотите писать много кода. Но для оптимизации и полного контроля лучше создавать CPT вручную.

Советы по созданию и использованию Custom Post Types

1. Всегда давайте уникальное и логичное имя для CPT (не используйте имена, которые могут конфликтовать с плагинами или ядром WordPress).

2. Используйте параметр show_in_rest для поддержки редактора Gutenberg и новых функций WordPress.

3. Планируйте, какие поля и таксономии будут связаны с CPT заранее — это облегчит дальнейшее развитие сайта.

4. Для кастомных шаблонов используйте стандарты WordPress, чтобы сохранить совместимость с темой.

5. Тестируйте работу CPT на разных этапах разработки, особенно если используете нестандартные таксономии и метаполя.

Заключение

Создание собственного типа записи — один из самых полезных и востребованных приемов при разработке сайтов на WordPress. Он позволяет структурировать контент, улучшить навигацию и адаптировать сайт под конкретные задачи. Используйте предоставленный пример и рекомендации, чтобы быстро и качественно добавить новый тип контента на ваш сайт.

Как использовать Transients API для кэширования в WordPress
08.12.2025
Как использовать хуки в WordPress для расширения функциональности
30.11.2025
WooCommerce: автоматическое изменение цен и скидок по расписанию без плагинов
07.05.2026
Как добавить уникальное пользовательское поле в регистрацию WordPress
23.01.2026
WooCommerce: как правильно настроить удаление вариантов товаров по расписанию
04.07.2026