Как добавить собственный тип записи (custom post type) в WordPress

В WordPress по умолчанию есть несколько типов записей, таких как записи (posts) и страницы (pages). Однако часто возникает необходимость создать свои собственные типы записей — custom post types, чтобы эффективно структурировать контент и расширять функциональность сайта. В этой статье мы подробно разберём, как добавить собственный тип записи в WordPress программно и при помощи плагинов, а также рассмотрим примеры полезных сценариев использования.

Что такое custom post type и зачем он нужен

Custom post type (CPT) — это пользовательский тип записи, который позволяет создавать и хранить контент, отличающийся по структуре и назначению от стандартных записей и страниц. Например, если вы ведёте сайт с каталогом книг, то логично создать CPT «Книги», чтобы удобно управлять этим контентом, иметь отдельные метабоксы, таксономии и шаблоны вывода.

Использование собственных типов записей позволяет:

  • Организовать контент по тематике и типу;
  • Создавать отдельные интерфейсы для редактирования;
  • Настраивать отображение и фильтрацию данных;
  • Расширять функционал без необходимости создания отдельных таблиц в базе данных.

Это значительно упрощает администрирование и улучшает пользовательский опыт.

Регистрация custom post type через функцию register_post_type

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

Пример создания CPT «Книги» для сайта:

function wpbest_register_custom_post_type_books() {
    $labels = array(
        'name'               => 'Книги',
        'singular_name'      => 'Книга',
        'menu_name'          => 'Книги',
        'name_admin_bar'     => 'Книга',
        'add_new'            => 'Добавить книгу',
        'add_new_item'       => 'Добавить новую книгу',
        'new_item'           => 'Новая книга',
        'edit_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('wpbest_books', $args);
}
add_action('init', 'wpbest_register_custom_post_type_books');

В этом коде мы создаём CPT с множеством параметров, которые определяют, как он будет отображаться в админке и на сайте. Обратите внимание, что префикс wpbest_ помогает избежать конфликтов с другими типами записей.

Разбор параметров в register_post_type

labels — массив с локализованными названиями для интерфейса.

public — делает тип записи доступным для фронтенда и админки.

rewrite — настраивает ЧПУ (человеко-понятные URL).

supports — перечисляет возможности, которые доступны для записей CPT (заголовок, редактор, миниатюры и т.д.).

Правильная настройка этих параметров позволяет максимально адаптировать тип записи под задачи сайта.

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

Для организации записей CPT часто требуется добавить собственные таксономии — категории и метки. WordPress позволяет регистрировать пользовательские таксономии через функцию register_taxonomy().

Пример регистрации таксономии «Жанры» для CPT «Книги»:

function wpbest_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' => 'genres'),
    );

    register_taxonomy('wpbest_genres', array('wpbest_books'), $args);
}
add_action('init', 'wpbest_register_taxonomy_genres');

Таксономия «Жанры» будет работать как обычные категории, позволяя создавать иерархии и фильтровать записи по жанрам.

Плагины для работы с custom post types

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

  • Custom Post Type UI — позволяет создавать типы записей и таксономии через удобный интерфейс без кода.
  • Pods — расширенный инструмент для создания CPT, таксономий и пользовательских полей.
  • Toolset Types — комплексный плагин для построения сложной структуры контента.

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

Пример вывода записей собственного типа в шаблоне

Чтобы вывести записи CPT на сайте, можно использовать WP_Query с указанием типа записи:

$args = array(
    'post_type' => 'wpbest_books',
    'posts_per_page' => 10
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        the_excerpt();
    }
    wp_reset_postdata();
} else {
    echo 'Книги не найдены';
}

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

Советы и лучшие практики при работе с custom post types

При создании CPT стоит придерживаться нескольких правил:

  • Используйте уникальные префиксы в названии типа записи и таксономий, чтобы избежать конфликтов с другими плагинами и темами.
  • Регистрация CPT и таксономий должна происходить на хуке init.
  • Следите за поддержкой локализации — используйте функции перевода, если планируете многоязычный сайт.
  • Настраивайте permalinks (ЧПУ) и не забывайте сбрасывать их после изменений (через Settings > Permalinks или программно).
  • Продумывайте структуру поддержки в шаблонах — шаблоны single-{post_type}.php и archive-{post_type}.php позволяют создавать кастомные страницы для CPT.

Правильная работа с custom post types значительно расширяет возможности WordPress и позволяет создавать сайты любой сложности.

Как избежать конфликтов между плагинами WordPress: практические решения
05.12.2025
Как автоматизировать удаление спама в комментариях WordPress
20.12.2025
Как использовать REST API в WordPress для создания настраиваемых приложений
23.11.2025
Оптимизация кэширования в WordPress для ускорения сайта
02.12.2025
Как сделать удалённую загрузку файлов в WordPress через AJAX с примерами
04.01.2026