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

В WordPress по умолчанию есть несколько типов записей, таких как записи (posts) и страницы (pages). Однако для расширения функционала сайта часто требуется создать собственные типы записей — Custom Post Types (CPT). Это позволяет структурировать контент более гибко и удобно для пользователей и разработчиков.

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

Custom Post Type — это пользовательский тип записи, который можно использовать для хранения и отображения специфического контента. Например, если вы ведёте сайт с рецептами, можно создать CPT «Рецепты», чтобы отделить их от стандартных записей блога.

Создание собственного типа записи помогает:

  • Логично структурировать данные;
  • Упростить администрирование сайта;
  • Создать индивидуальные шаблоны отображения;
  • Использовать собственные метаполя и таксономии.

Давайте разберём, как создать CPT на примере типа записи «События».

Создание Custom Post Type через functions.php

Самый простой способ добавить CPT — зарегистрировать его в файле functions.php вашей темы или в отдельном плагине. Используйте функцию register_post_type.

function wpfront_register_event_post_type() {
    $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' => 'events'),
        'show_in_rest'       => true, // для поддержки Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-calendar-alt',
    );
    register_post_type('wpfront_event', $args);
}
add_action('init', 'wpfront_register_event_post_type');

После добавления этого кода и обновления админки WordPress вы увидите новый пункт меню «События» с возможностью создавать записи этого типа.

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

Чтобы лучше структурировать контент, к CPT можно добавить собственные таксономии (например, категории и теги для событий). Вот как это сделать:

function wpfront_register_event_taxonomies() {
    // Таксономия "Место проведения"
    $labels_location = array(
        'name'              => 'Места проведения',
        'singular_name'     => 'Место проведения',
        'search_items'      => 'Искать места',
        'all_items'         => 'Все места',
        'edit_item'         => 'Редактировать место',
        'update_item'       => 'Обновить место',
        'add_new_item'      => 'Добавить новое место',
        'new_item_name'     => 'Новое название места',
        'menu_name'         => 'Места проведения',
    );
    $args_location = array(
        'hierarchical'      => true, // как категории
        'labels'            => $labels_location,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'event-location'),
        'show_in_rest'      => true,
    );
    register_taxonomy('wpfront_event_location', array('wpfront_event'), $args_location);
}
add_action('init', 'wpfront_register_event_taxonomies');

Теперь при создании события можно будет выбрать место проведения из списка или добавить новое.

Вывод Custom Post Type на сайте — шаблон и WP_Query

Чтобы вывести записи CPT на фронтенде, можно создать файл шаблона, например archive-wpfront_event.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></li>
    <?php endwhile; ?>
    </ul>
<?php else : ?>
    <p>События не найдены.</p>
<?php endif; ?>
<?php get_footer(); ?>

Если вы хотите вывести события в любом месте сайта, используйте класс WP_Query с параметром post_type:

$args = array(
    'post_type' => 'wpfront_event',
    'posts_per_page' => 5,
    'orderby' => 'date',
    'order' => 'DESC'
);
$events_query = new WP_Query($args);
if ($events_query->have_posts()) {
    echo '<ul>';
    while ($events_query->have_posts()) {
        $events_query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
} else {
    echo '<p>События не найдены.</p>';
}
wp_reset_postdata();

Полезные плагины для управления Custom Post Types

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

  • Custom Post Type UI — удобный плагин для создания CPT и таксономий;
  • Advanced Custom Fields — добавляет кастомные поля к любым типам записей;
  • Clearfy Pro — оптимизирует работу WordPress, в том числе улучшает работу с CPT.

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

Советы по организации и оптимизации CPT

При создании собственного типа записи учитывайте:

  • Уникальность post_type — используйте префикс, например, wpfront_, чтобы избежать конфликтов с другими плагинами и темами;
  • Обязательно задавайте понятные и полные метки (labels) для удобства пользователей в админке;
  • Подключайте поддержку REST API (show_in_rest => true), если планируете использовать Gutenberg или делать собственные приложения на React/Vue;
  • Оптимизируйте запросы и не создавайте слишком много CPT без необходимости — это может повлиять на производительность;
  • Создавайте отдельные шаблоны для CPT, чтобы контролировать вывод и дизайн.

Правильная организация позволяет сделать сайт удобным как для посетителей, так и для администраторов.

WooCommerce: как автоматически удалять заказы по статусу и дате
15.05.2026
Как автоматически отключить XML-RPC в WordPress для повышения безопасности
06.04.2026
Как создать автоматический импорт контента из внешнего источника в WordPress
26.02.2026
Как настроить автоматическое сохранение черновиков в WordPress для предотвращения потери данных
07.12.2025
Как создать автоматический импорт контента в WordPress с помощью REST API
12.02.2026