Руководство по созданию пользовательских типов записей в WordPress

Что такое пользовательские типы записей в WordPress и зачем они нужны

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

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

WPGen рекомендует освоить создание и настройку CPT, чтобы максимально адаптировать WordPress под свои задачи и создавать уникальные проекты.

Создание пользовательского типа записей с помощью кода

Регистрация CPT в functions.php

Самый распространённый и гибкий способ создания пользовательского типа записей — добавить функцию регистрации в файл functions.php вашей темы или в отдельный плагин. Рассмотрим пример создания типа записей «Книги» (books):

function wpgen_register_cpt_books() {
    $labels = array(
        'name'               => 'Книги',
        'singular_name'      => 'Книга',
        'menu_name'          => 'Книги',
        'name_admin_bar'     => 'Книга',
        'add_new'            => 'Добавить новую',
        'add_new_item'       => 'Добавить новую книгу',
        'edit_item'          => 'Редактировать книгу',
        'new_item'           => 'Новая книга',
        'view_item'          => 'Просмотр книги',
        'all_items'          => 'Все книги',
        'search_items'       => 'Поиск книг',
        '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' => 'books'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
    );

    register_post_type('wpgen_books', $args);
}
add_action('init', 'wpgen_register_cpt_books');

В этом примере мы создаём CPT с идентификатором wpgen_books, указывая метки для интерфейса и ключевые параметры. Параметр 'supports' определяет, какие стандартные функции будут доступны для типа записи (например, редактор контента, миниатюры, комментарии).

Обратите внимание, что префикс wpgen_ добавлен для избежания конфликтов с другими типами.

Регистрация таксономий для CPT

Для удобной категоризации ваших записей полезно добавить пользовательские таксономии. Например, для книг можно создать таксономию «Жанры».

function wpgen_register_taxonomy_genres() {
    $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' => 'genre'),
    );

    register_taxonomy('wpgen_genre', array('wpgen_books'), $args);
}
add_action('init', 'wpgen_register_taxonomy_genres');

Теперь в админке при редактировании книги можно выбрать один или несколько жанров. Таксономии помогают структурировать контент и улучшить навигацию.

Использование плагинов для создания CPT: обзор и рекомендации

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

Advanced Custom Fields (ACF)

Хотя ACF напрямую не создаёт CPT, он отлично дополняет их, позволяя создавать удобные метаполя для ваших типов записей. Использование ACF вместе с CPT позволяет создавать мощные кастомные интерфейсы для редактирования.

Custom Post Type UI (CPT UI)

Этот плагин — один из самых популярных для создания и управления пользовательскими типами записей и таксономиями без кода. Интерфейс удобен и интуитивен: вы задаёте все параметры через админку, а плагин регистрирует CPT автоматически.

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

WPGen советует комбинировать CPT UI с ACF для получения максимального контроля и удобства.

Вывод пользовательских типов записей на сайте: примеры кода

После создания CPT важно правильно вывести записи на сайте. Рассмотрим несколько примеров.

Вывод списка последних записей CPT

$args = array(
    'post_type'      => 'wpgen_books',
    '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 'Записей не найдено.';
}

Этот код выводит список из 10 последних книг с ссылками на отдельные страницы.

Вывод записей CPT с таксономией

Чтобы вывести книги определённого жанра, можно использовать так:

$args = array(
    'post_type' => 'wpgen_books',
    'tax_query' => array(
        array(
            'taxonomy' => 'wpgen_genre',
            'field'    => 'slug',
            'terms'    => 'fantasy',
        ),
    ),
);
$query = new WP_Query($args);
// Вывод аналогичен предыдущему примеру

Советы по совместимости и производительности при использовании CPT

При внедрении пользовательских типов записей важно учитывать совместимость с темами и плагинами. Следите, чтобы идентификаторы CPT были уникальными и не конфликтовали с уже существующими. Используйте префиксы (как wpgen_) для защиты.

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

WPGen советует тестировать CPT на реальных данных и внимательно настраивать права доступа через параметры capability_type и роли пользователей.

Заключение

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

Как использовать хук woocommerce_cart_calculate_fees для добавления дополнительных платежей в WooCommerce
10.05.2026
WooCommerce: как избежать проблем с ответственным сохранением данных в корзине
27.05.2026
Как использовать хук WooCommerce woocommerce_before_calculate_totals для изменения цен в корзине
13.05.2026
Как создать динамические виджеты в WordPress с поддержкой AJAX
13.03.2026
Как создать собственный REST API endpoint в WordPress с примером кода
31.12.2025