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

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

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

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

Собственные типы записей позволяют:

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

Без CPT вы быстро столкнётесь с ограничениями и не сможете гибко управлять структурой сайта.

Регистрация собственного типа записи через функцию wpblog_register_custom_post_type()

Для регистрации CPT используем функцию register_post_type(). Важно делать это на хуке init. Рассмотрим пример создания типа записи «Кейсы».

function wpblog_register_custom_post_type() {
    $labels = array(
        'name'               => 'Кейсы',
        'singular_name'      => 'Кейс',
        'menu_name'          => 'Кейсы',
        'name_admin_bar'     => 'Кейс',
        'add_new'            => 'Добавить кейс',
        'add_new_item'       => 'Добавить новый кейс',
        'edit_item'          => 'Редактировать кейс',
        'new_item'           => 'Новый кейс',
        'view_item'          => 'Просмотреть кейс',
        'search_items'       => 'Поиск кейсов',
        'not_found'          => 'Кейсы не найдены',
        'not_found_in_trash' => 'В корзине кейсы не найдены',
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'cases'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest'       => true,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
    );

    register_post_type('case', $args);
}
add_action('init', 'wpblog_register_custom_post_type');

В этом примере создаётся тип записи case с поддержкой заголовка, содержимого, миниатюры и произвольных полей. Параметр show_in_rest важен для совместимости с редактором Gutenberg и REST API.

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

labels — задают подписи в админке.
public — определяет доступность типа для фронтенда и админки.
has_archive — разрешает создание архивной страницы с URL /cases/.
rewrite — задаёт правила ЧПУ.
supports — определяет поддерживаемые возможности.
menu_icon — иконка в меню админки.

Добавление метабоксов с помощью wpblog_add_custom_meta_boxes()

Часто требуется добавить уникальные поля для CPT. Для этого используем метабоксы. Пример добавления метабокса «Информация о кейсе» с полем «Клиент».

function wpblog_add_custom_meta_boxes() {
    add_meta_box(
        'wpblog_case_info',
        'Информация о кейсе',
        'wpblog_case_info_callback',
        'case',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpblog_add_custom_meta_boxes');

function wpblog_case_info_callback($post) {
    wp_nonce_field('wpblog_save_case_info', 'wpblog_case_info_nonce');
    $client = get_post_meta($post->ID, '_wpblog_case_client', true);
    echo '<label for="wpblog_case_client">Клиент:</label> ';
    echo '<input type="text" id="wpblog_case_client" name="wpblog_case_client" value="' . esc_attr($client) . '" size="25" />';
}

function wpblog_save_case_info($post_id) {
    if (!isset($_POST['wpblog_case_info_nonce']) || !wp_verify_nonce($_POST['wpblog_case_info_nonce'], 'wpblog_save_case_info')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (isset($_POST['wpblog_case_client'])) {
        update_post_meta($post_id, '_wpblog_case_client', sanitize_text_field($_POST['wpblog_case_client']));
    }
}
add_action('save_post', 'wpblog_save_case_info');

Этот код добавляет метабокс с полем ввода, сохраняет данные безопасно с помощью nonce и проверок прав.

Вывод собственных типов записей на фронтенде: шаблоны и WP_Query

Чтобы отобразить записи CPT, создают отдельные шаблоны:

  • archive-case.php — для архива кейсов;
  • single-case.php — для отдельной записи кейса.

Пример запроса для вывода 5 последних кейсов с сортировкой по дате:

$args = array(
    'post_type' => 'case',
    'posts_per_page' => 5,
    'orderby' => 'date',
    'order' => 'DESC',
);
$wpblog_query = new WP_Query($args);

if ($wpblog_query->have_posts()) {
    while ($wpblog_query->have_posts()) {
        $wpblog_query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_excerpt() . '</div>';
    }
    wp_reset_postdata();
} else {
    echo '<p>Кейсы не найдены.</p>';
}

Важно всегда сбрасывать постдату после пользовательских запросов.

Использование плагинов для расширения возможностей CPT

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

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

Комбинация программного кода и плагинов позволяет создавать мощные и удобные решения для любых задач.

Советы по SEO и производительности для собственных типов записей

При создании CPT важно учитывать влияние на SEO и скорость сайта:

  • Используйте ЧПУ с ключевыми словами через параметр rewrite.
  • Создавайте отдельные sitemap для CPT, если используете SEO-плагины — например, Clearfy Pro помогает с настройками.
  • Оптимизируйте запросы, избегайте избыточных метаполей и тяжелых join-запросов.
  • Добавляйте кэширование для страниц CPT, особенно если их много.

Следуя этим рекомендациям, вы получите быстро работающий и SEO-дружественный сайт с собственными типами записей.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как реализовать авторизацию через SMS OTP для повышения безопасности
28.04.2026
Создать автоматические бэкапы WordPress без плагинов: практическое руководство
30.11.2025
WooCommerce: как правильно удалять товары с очисткой связанных данных
25.04.2026
WooCommerce: как правильно удалять товары с очисткой связанных данных
03.05.2026
Как установить ограничения на сохранение данных через REST API в WordPress
12.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше