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

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

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

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

Пользовательский тип записи позволяет:

  • Разделять контент по смыслу и структуре, не смешивая с обычными постами.
  • Назначать отдельные мета-поля, таксономии и шаблоны отображения.
  • Упростить администрирование и управление контентом для редакторов.

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

Регистрация собственного типа записи с помощью функции wpfreecourses_register_custom_post_type

Для создания пользовательского типа записи в WordPress используется функция register_post_type(). Мы создадим обертку wpfreecourses_register_custom_post_type, чтобы показать пример правильной инициализации.

function wpfreecourses_register_custom_post_type() {
    $labels = array(
        'name' => 'Отзывы',
        'singular_name' => 'Отзыв',
        'add_new' => 'Добавить отзыв',
        'add_new_item' => 'Добавить новый отзыв',
        'edit_item' => 'Редактировать отзыв',
        'new_item' => 'Новый отзыв',
        'view_item' => 'Просмотреть отзыв',
        'search_items' => 'Поиск отзывов',
        'not_found' => 'Отзывы не найдены',
        'not_found_in_trash' => 'В корзине отзывов не найдено',
        'menu_name' => 'Отзывы'
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'otzyvy'),
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments'),
        'show_in_rest' => true // Включаем поддержку Gutenberg
    );
    register_post_type('wpfreecourses_review', $args);
}
add_action('init', 'wpfreecourses_register_custom_post_type');

В этом примере мы создали тип записи «Отзывы» с базовыми настройками. Обратите внимание на параметр supports, который определяет, какие стандартные возможности будут доступны для записей данного типа.

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

labels — массив текстов интерфейса, которые отображаются в админке WordPress. Их стоит перевести и адаптировать под ваш проект.

public — определяет, будет ли тип записи доступен на фронтенде и в административной части.

has_archive — включение архивной страницы типа записи.

rewrite — настройка правил ЧПУ (человекопонятного урла). В данном случае записи будут доступны по адресу example.com/otzyvy/название-записи.

supports — включает стандартные метабоксы и функционал редактора для данного типа записи.

show_in_rest — необходим для поддержки редактора Gutenberg и REST API.

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

Чтобы расширить возможности фильтрации и группировки, полезно добавить пользовательские таксономии (например, категории или теги) для нового типа записи.

Рассмотрим создание таксономии «Тип отзыва» для нашего CPT «Отзывы».

function wpfreecourses_register_review_taxonomy() {
    $labels = array(
        'name' => 'Типы отзывов',
        'singular_name' => 'Тип отзыва',
        'search_items' => 'Искать типы отзывов',
        'all_items' => 'Все типы отзывов',
        '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' => 'review-type'),
        'show_in_rest' => true
    );
    register_taxonomy('wpfreecourses_review_type', array('wpfreecourses_review'), $args);
}
add_action('init', 'wpfreecourses_register_review_taxonomy');

Таксономия с параметром hierarchical = true ведет себя как категории, позволяя создавать вложенные термины.

Использование пользовательского типа записи в шаблонах темы

После регистрации CPT, чтобы вывести записи на сайте, нужно создать шаблон. Например, для архива отзывов можно создать файл archive-wpfreecourses_review.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>
            <p><?php the_excerpt(); ?></p>
        </li>
    <?php endwhile; ?>
    </ul>
    <?php the_posts_pagination(); ?>
<?php else : ?>
    <p>Отзывы не найдены.</p>
<?php endif; ?>
<?php get_footer(); ?>

Такой шаблон позволит красиво вывести список ваших отзывов с пагинацией.

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

Если вы добавляли мета-поля (например, рейтинг), вывести их можно так:

echo '<p>Рейтинг: ' . esc_html(get_post_meta(get_the_ID(), 'wpfreecourses_review_rating', true)) . '</p>';

Для вывода таксономий используйте:

the_terms(get_the_ID(), 'wpfreecourses_review_type', 'Тип: ', ', ');

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

Часто пользовательского контента мало — нужно добавить специфичные данные. Для этого применяются мета-поля.

Рассмотрим пример добавления поля «Рейтинг» для отзывов с использованием стандартного API мета-полей.

Добавим метабокс:

function wpfreecourses_add_review_meta_box() {
    add_meta_box(
        'wpfreecourses_review_rating',
        'Рейтинг отзыва',
        'wpfreecourses_review_rating_meta_box_callback',
        'wpfreecourses_review',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'wpfreecourses_add_review_meta_box');

function wpfreecourses_review_rating_meta_box_callback($post) {
    $value = get_post_meta($post->ID, 'wpfreecourses_review_rating', true);
    echo '<label for="wpfreecourses_review_rating_field">Рейтинг (от 1 до 5):</label> ';
    echo '<input type="number" id="wpfreecourses_review_rating_field" name="wpfreecourses_review_rating_field" value="' . esc_attr($value) . '" min="1" max="5" />';
}

function wpfreecourses_save_review_meta_box_data($post_id) {
    if (!isset($_POST['wpfreecourses_review_rating_field'])) {
        return;
    }
    $rating = sanitize_text_field($_POST['wpfreecourses_review_rating_field']);
    update_post_meta($post_id, 'wpfreecourses_review_rating', $rating);
}
add_action('save_post', 'wpfreecourses_save_review_meta_box_data');

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

Советы по оптимизации и безопасности при работе с CPT

При создании собственных типов записей важно соблюдать несколько правил:

  • Используйте префиксы в названиях функций и мета-ключей, чтобы избежать конфликтов (как в нашем случае с wpfreecourses_).
  • Всегда проверяйте и санитизируйте вводимые данные перед сохранением.
  • Добавляйте поддержку REST API, если планируете интеграции с внешними сервисами или Gutenberg.
  • Продумывайте архитектуру таксономий и мета-полей заранее, чтобы избежать избыточности.
  • Используйте правильные хуки для регистрации CPT — обычно это init.

Заключение: расширяем возможности WordPress с CPT

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

Приведенный пример наглядно показывает, как с минимальными усилиями реализовать новую сущность «Отзывы» и интегрировать её в админку и фронтенд сайта. Освоив этот навык, вы сможете создавать каталоги, портфолио, события и многое другое, не ограничиваясь стандартными возможностями WordPress.

Автоматическое разделение длинных постов в WordPress
29.01.2026
Как создать динамическую форму в WordPress на PHP и AJAX
13.11.2025
Как создать собственный REST API endpoint в WordPress с примерами кода
22.12.2025
Как добавить AJAX в WordPress без jQuery: практическое руководство
09.11.2025
Как создать собственный shortcode в WordPress
06.11.2025