Как создать собственный тип записей (Custom Post Type) в WordPress

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

Что такое Custom Post Type и зачем он нужен

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

Custom Post Type позволяет:

  • Логично структурировать контент по типам.
  • Отделить контент для удобства администрирования.
  • Улучшить SEO за счет отдельного URL и шаблонов.
  • Использовать кастомные таксономии и метаполя.

Создание Custom Post Type через код: пример для wpkpi.ru

Для создания CPT нужно использовать функцию register_post_type(). Рекомендуется добавлять регистрацию в файл темы functions.php или в отдельный плагин. Ниже пример функции с префиксом wpkpi_:

function wpkpi_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' => 'project'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest'       => true // Для поддержки Gutenberg
    );

    register_post_type('wpkpi_project', $args);
}
add_action('init', 'wpkpi_register_custom_post_type');

В этом примере создаётся тип записей «Проекты» с URL site.ru/project/название-проекта. Поддерживаются заголовок, редактор, миниатюра, отрывок и пользовательские поля.

Настройка таксономий для Custom Post Type

Для удобной категоризации проектов можно добавить свои таксономии — категории и метки. Вот как создать таксономию «Тип проекта» для CPT:

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

    register_taxonomy('wpkpi_project_type', array('wpkpi_project'), $args);
}
add_action('init', 'wpkpi_register_project_taxonomies');

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

Вывод Custom Post Type на сайте: примеры WP_Query и шаблонов

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

$args = array(
    'post_type' => 'wpkpi_project',
    'posts_per_page' => 10,
    'orderby' => 'date',
    'order' => 'DESC'
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo 'Проекты не найдены';
}

Для отдельного CPT рекомендуют создавать шаблоны в теме: single-wpkpi_project.php, archive-wpkpi_project.php, чтобы задать уникальный дизайн.

Использование плагинов для создания Custom Post Type

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

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

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

Рекомендации по работе с Custom Post Type

При работе с CPT важно:

  • Использовать уникальные префиксы в именах функций и типов, например wpkpi_, чтобы избежать конфликтов.
  • Не забывать про поддержку REST API ('show_in_rest' => true), если используете блоковый редактор Gutenberg или планируете AJAX-интеграции.
  • Настраивать права доступа при необходимости — можно создать собственные роли и capabilities.
  • Оптимизировать запросы WP_Query, использовать кэширование.
  • Создавать шаблоны в теме для вывода CPT, чтобы не смешивать с обычными записями.

Создание собственного типа записей — мощный инструмент для расширения возможностей WordPress. Даже с минимальным опытом PHP можно быстро внедрить эту функцию и сделать сайт более профессиональным и удобным.

WooCommerce: автоматическое удаление неактивных покупателей по дате последнего заказа
18.05.2026
Изменение URL для страниц со статьями в WordPress без редиректа
09.12.2025
Как отследить посещаемость сайта на WordPress: лучшие методы и плагины
01.12.2025
Как отладить проблемы со вставкой кода в WordPress
24.11.2025
Отложенный запуск задач в WordPress без Cron: практическое руководство
12.01.2026