Как добавить собственный тип записи в WordPress

Собственные типы записей (Custom Post Types) в WordPress позволяют расширить функциональность сайта, добавляя новые виды содержимого, отличные от стандартных «Записей» и «Страниц». Например, вы можете создать тип записи для портфолио, отзывов, событий или товаров. В этой статье разберём, как правильно добавить собственный тип записи на сайт с помощью кода и популярных плагинов, а также как с ним работать.

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

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

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

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

  • Организовать контент по смыслу и функционалу;
  • Упростить управление и редактирование;
  • Настроить отображение в админке и на фронтенде;
  • Использовать отдельные метаданные и таксономии.

Регистрация собственного типа записи через functions.php

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

function wpset_register_custom_post_type() {
    $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'       => 'Искать кейсы',
        'parent_item_colon'  => '',
        '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' => 'case'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
        'show_in_rest'       => true
    );

    register_post_type('wpset_case', $args);
}
add_action('init', 'wpset_register_custom_post_type');

В этом коде мы создали тип записи с названием wpset_case, который будет отображаться в админке под именем «Кейсы». Параметры supports определяют, какие стандартные поля будут доступны (заголовок, редактор, миниатюра и т.д.).

Обратите внимание на параметр show_in_rest: он включает поддержку редактора Gutenberg для типа записи.

Пояснения к основным параметрам

  • labels — массив с надписями, показываемыми в интерфейсе админки;
  • public — тип записи будет доступен на сайте и в админке;
  • rewrite — настраивает структуру URL;
  • has_archive — включает архивный список записей данного типа;
  • supports — какие поля и возможности доступны для записи;
  • show_in_rest — поддержка REST API и редактора Gutenberg.

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

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

1. Custom Post Type UI

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

Преимущества:

  • Простота и удобство;
  • Поддержка кастомных таксономий;
  • Возможность экспорта и импорта настроек;
  • Регулярные обновления и поддержка.

2. Toolset Types

Более мощный инструмент, который позволяет создавать не только типы записей, но и настраивать поля, связи между ними, шаблоны вывода.

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

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

Часто вместе с типом записи нужно добавить и свои таксономии — категории, метки или пользовательские. Рассмотрим пример регистрации пользовательской таксономии «Тип кейса» для созданного выше типа записи:

function wpset_register_custom_taxonomy() {
    $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' => 'case_type'),
        'show_in_rest'      => true
    );

    register_taxonomy('wpset_case_type', array('wpset_case'), $args);
}
add_action('init', 'wpset_register_custom_taxonomy');

В результате в админке для типа записи «Кейсы» появится отдельный раздел «Типы кейсов», где можно создавать и назначать категории.

Вывод собственного типа записи на фронтенде

Для отображения записей нового типа на сайте нужно создать шаблоны. WordPress автоматически ищет файлы шаблонов с названием single-{post_type}.php для одиночных записей и archive-{post_type}.php для архивов.

Для типа записи wpset_case создайте в папке темы файлы:

  • single-wpset_case.php — шаблон одиночного кейса;
  • archive-wpset_case.php — шаблон списка всех кейсов.

Пример простого цикла вывода на странице архива:

<?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(); ?>

Добавление мета-полей к собственному типу записи

Иногда стандартных полей недостаточно, и нужны дополнительные данные в виде мета-полей. Для их создания можно использовать:

  • Ручное добавление через функции add_meta_box и сохранение данных через хуки.
  • Плагины, например Advanced Custom Fields (ACF), для визуального создания полей.

Пример добавления мета-бокса с полем «Клиент» для кейса:

function wpset_add_meta_box() {
    add_meta_box(
        'wpset_case_client',
        'Клиент',
        'wpset_case_client_meta_box_callback',
        'wpset_case',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'wpset_add_meta_box');

function wpset_case_client_meta_box_callback($post) {
    wp_nonce_field('wpset_case_save_meta_box_data', 'wpset_case_meta_box_nonce');
    $value = get_post_meta($post->ID, '_wpset_case_client', true);
    echo '<label for="wpset_case_client_field">Имя клиента: </label>';
    echo '<input type="text" id="wpset_case_client_field" name="wpset_case_client_field" value="' . esc_attr($value) . '" size="25" />';
}

function wpset_case_save_meta_box_data($post_id) {
    if (!isset($_POST['wpset_case_meta_box_nonce'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['wpset_case_meta_box_nonce'], 'wpset_case_save_meta_box_data')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpset_case_client_field'])) {
        $client_data = sanitize_text_field($_POST['wpset_case_client_field']);
        update_post_meta($post_id, '_wpset_case_client', $client_data);
    }
}
add_action('save_post', 'wpset_case_save_meta_box_data');

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

Вывод мета-полей в шаблонах

Чтобы вывести значение мета-поля в шаблоне одиночной записи, используйте функцию get_post_meta:

<?php
$client = get_post_meta(get_the_ID(), '_wpset_case_client', true);
if ($client) {
    echo '<p><strong>Клиент:</strong> ' . esc_html($client) . '</p>';
}
?>

Это позволит показывать дополнительную информацию в удобном формате.

Итоги и рекомендации

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

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

Как сделать автоматический редирект после удаления записи в WordPress
17.12.2025
Как создать автоматический импорт данных из Google Sheets в WordPress
09.02.2026
Как создать фильтрованный вывод постов в WordPress с помощью кода
14.01.2026
Реактивный фильтрованный вывод постов в WordPress с AJAX
20.03.2026
Автоматический импорт товаров из YML в WordPress: пошаговое руководство
05.02.2026