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

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

Что такое пользовательские типы записей в WordPress

Пользовательский тип записи — это способ структурировать контент, который отличается от стандартных постов и страниц. Например, если вы создаёте сайт для ресторана, вам может понадобиться тип записи «Меню», «Отзывы» или «Сотрудники». Это позволит удобно хранить, редактировать и отображать отдельные виды контента.

Регистрация CPT даёт возможность создавать отдельные разделы в админ-панели, управлять выводом на фронтенде, применять собственные таксономии и метаполя.

Основные способы добавления CPT в WordPress

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

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

Вот пример базовой функции для регистрации CPT «Кейсы» (Cases):

function wpstudy_register_cpt_cases() {
    $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' => 'cases'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields')
    );
    register_post_type('cases', $args);
}
add_action('init', 'wpstudy_register_cpt_cases');

Эта функция создаст новый тип записи с поддержкой заголовка, редактора, миниатюр и других элементов. В админке появится новый пункт меню «Кейсы».

Использование плагинов для создания CPT

Если вы не хотите писать код, можно использовать плагины. Самые популярные:

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

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

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

Часто вместе с CPT нужны собственные категории и теги. WordPress позволяет создавать свои таксономии, которые можно связать с CPT.

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

function wpstudy_register_taxonomy_cases_category() {
    $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' => 'cases-category'),
    );
    register_taxonomy('cases_category', array('cases'), $args);
}
add_action('init', 'wpstudy_register_taxonomy_cases_category');

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

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

Чтобы вывести записи CPT на сайте, можно использовать WP_Query с параметром post_type. Рассмотрим пример вывода последних 5 кейсов на странице шаблона:

$args = array(
    'post_type'      => 'cases',
    'posts_per_page' => 5,
    'orderby'        => 'date',
    'order'          => 'DESC'
);
$cases_query = new WP_Query($args);
if ($cases_query->have_posts()) {
    echo '<ul class="cases-list">';
    while ($cases_query->have_posts()) {
        $cases_query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo '<p>Кейсы не найдены.</p>';
}

Такой код можно вставить в шаблон темы или в кастомный шорткод.

Создание шорткода для вывода CPT

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

function wpstudy_shortcode_cases_list($atts) {
    $atts = shortcode_atts(array(
        'count' => 5
    ), $atts, 'cases_list');
    $args = array(
        'post_type'      => 'cases',
        'posts_per_page' => intval($atts['count'])
    );
    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return '<p>Кейсы не найдены.</p>';
    }
    $output = '<ul class="cases-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    $output .= '</ul>';
    wp_reset_postdata();
    return $output;
}
add_shortcode('cases_list', 'wpstudy_shortcode_cases_list');

Теперь вы можете вставлять в записи шорткод [cases_list count="3"], чтобы вывести последние 3 кейса.

Оптимизация и советы по работе с CPT

При создании CPT важно учитывать следующее:

  • SEO: используйте понятные слаги (slug) и настраивайте ЧПУ через параметр rewrite. Для улучшения SEO советуем применять плагины типа Clearfy Pro, которые оптимизируют структуру сайта.
  • Права доступа: при необходимости задавайте отдельные capabilities, чтобы ограничить редактирование CPT для определённых ролей пользователей.
  • Мета-поля: расширяйте CPT с помощью метаполей для дополнительной информации, например, через плагины Meta Box или ACF.
  • Архивы и шаблоны: создавайте шаблоны archive-{post_type}.php и single-{post_type}.php для кастомного вывода записей.

Пример кастомного шаблона archive-cases.php

В теме можно создать файл archive-cases.php для вывода списка кейсов. Пример базового цикла:

get_header();
if (have_posts()) {
    echo '<h1>Кейсы</h1>';
    while (have_posts()) {
        the_post();
        echo '<article>';
        the_title('<h2>', '</h2>');
        the_excerpt();
        echo '</article>';
    }
    the_posts_pagination();
} else {
    echo '<p>Кейсы не найдены.</p>';
}
get_footer();

Пример нестандартного кейса: интеграция CPT с плагином WPGPT

Если на вашем сайте установлен плагин WPGPT, можно автоматизировать создание контента для CPT с помощью ИИ. Например, при добавлении нового кейса можно сгенерировать описание через GPT и сохранить его в поле редактора.

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

Заключение

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

Рекомендуем начинать с простого кода, постепенно дополняя функционал метаполями и интеграциями с плагинами. Это позволит сохранить гибкость и управляемость проекта.

WP-Cron в WordPress: настройка и отладка автоматических задач
20.04.2026
WooCommerce: как автоматически удалять заказы по статусу и дате
09.06.2026
Добавление отзывов с оценками в WordPress без плагинов
18.01.2026
Оптимизация загрузки скриптов в WordPress: практические советы и примеры
06.04.2026
WooCommerce: как автоматически удалять заказы по статусу и дате
04.05.2026