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

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

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

По умолчанию WordPress содержит несколько типов записей: post (записи), page (страницы), attachment (вложения) и др. Однако для организации специфического контента, например портфолио, отзывов, продуктов или мероприятий, удобнее создать отдельный тип записей. Это позволит:

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

Таким образом, CPT — это мощный инструмент для кастомизации сайта под любые бизнес-задачи.

Регистрация собственного типа записей: пример кода

Для регистрации CPT нужно использовать функцию register_post_type(). Обычно вызов помещают в хук init. Ниже пример создания CPT «Портфолио» с базовыми настройками.

function yarpp_register_portfolio_cpt() {
    $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,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array('slug' => 'portfolio'),
        '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('yarpp_portfolio', $args);
}
add_action('init', 'yarpp_register_portfolio_cpt');

Обратите внимание на ключевые параметры:

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

Настройка таксономий и метаполей для CPT

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

Добавление таксономий

Например, создадим таксономию «Тип проекта» для нашего портфолио:

function yarpp_register_portfolio_taxonomies() {
    $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' => 'project-type'),
        'show_in_rest'      => true,
    );

    register_taxonomy('yarpp_project_type', array('yarpp_portfolio'), $args);
}
add_action('init', 'yarpp_register_portfolio_taxonomies');

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

Добавление метаполей

Для добавления дополнительных данных к записи CPT удобно использовать метаполя. Можно использовать плагины (например, Advanced Custom Fields), но ниже пример простого добавления метаполя с кодом.

Добавим поле «Год создания проекта».

function yarpp_add_portfolio_meta_boxes() {
    add_meta_box(
        'yarpp_portfolio_year',
        'Год создания проекта',
        'yarpp_portfolio_year_meta_box_callback',
        'yarpp_portfolio',
        'side'
    );
}
add_action('add_meta_boxes', 'yarpp_add_portfolio_meta_boxes');

function yarpp_portfolio_year_meta_box_callback($post) {
    wp_nonce_field('yarpp_save_portfolio_year', 'yarpp_portfolio_year_nonce');
    $value = get_post_meta($post->ID, '_yarpp_portfolio_year', true);
    echo '<label for="yarpp_portfolio_year_field">Введите год:</label> ';
    echo '<input type="number" id="yarpp_portfolio_year_field" name="yarpp_portfolio_year_field" value="' . esc_attr($value) . '" size="4" />';
}

function yarpp_save_portfolio_year($post_id) {
    if (!isset($_POST['yarpp_portfolio_year_nonce']) || !wp_verify_nonce($_POST['yarpp_portfolio_year_nonce'], 'yarpp_save_portfolio_year')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['yarpp_portfolio_year_field'])) {
        $year = intval($_POST['yarpp_portfolio_year_field']);
        update_post_meta($post_id, '_yarpp_portfolio_year', $year);
    }
}
add_action('save_post', 'yarpp_save_portfolio_year');

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

Вывод собственных типов записей на сайте

Чтобы вывести CPT на фронтенде, можно создать отдельный шаблон архива и одиночной записи. Для архива создайте файл archive-yarpp_portfolio.php в папке вашей темы, для одиночной записи — single-yarpp_portfolio.php.

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

<?php
$args = array(
    'post_type' => 'yarpp_portfolio',
    'posts_per_page' => 10,
);
$query = new WP_Query($args);
if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post(); ?>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div><?php the_excerpt(); ?></div>
    <?php endwhile;
    wp_reset_postdata();
else :
    echo '<p>Проекты не найдены.</p>';
endif;
?>

Для одиночной записи используйте стандартные функции WordPress, например the_title(), the_content(), а для метаполей — get_post_meta():

<?php
$year = get_post_meta(get_the_ID(), '_yarpp_portfolio_year', true);
echo '<p>Год создания: ' . esc_html($year) . '</p>';
?>

Интеграция CPT с популярными плагинами

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

Yoast SEO и пользовательские типы записей

Чтобы включить CPT в карту сайта и управление SEO, в настройках Yoast SEO нужно разрешить отображение и индексацию для вашего типа. Для этого зайдите в раздел «Поисковый внешний вид» > «Типы записей» и выберите нужные опции.

Кеширование и CPT

При использовании кеширующих плагинов (WP Super Cache, W3 Total Cache) важно убедиться, что правила перезаписи для CPT работают корректно и кеш обновляется при изменении записей. Рекомендуется очищать кеш после добавления или редактирования CPT.

Визуальные редакторы и конструкторы страниц

Поддержка Gutenberg и других визуальных редакторов включается через параметр show_in_rest. Для популярных конструкторов (Elementor, Beaver Builder) CPT автоматически доступны, если они публичные и отображаются в меню.

Полезные советы и рекомендации при работе с CPT

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

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

⭐⭐⭐⭐⭐
YARPP и комплексное кеширование связанных записей в WordPress: практические решения
18.03.2026
Как автоматизировать создание связанных записей по ключевым словам в WordPress
09.04.2026
YARPP и WooCommerce: как сделать подбор связанных товаров в интернет-магазине
11.02.2026
Как создать кастомные шаблоны связанных записей в WordPress
22.12.2025
YARPP и AJAX: динамическая подгрузка связанных записей в WordPress
31.01.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙