Как добавить собственные типы постов в WordPress с примерами

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

Что такое собственные типы постов в WordPress

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

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

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

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

Давайте разберём пример регистрации типа поста «wpgenerate_portfolio» для сайта с портфолио проектов.

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

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
        'rewrite'            => array('slug' => 'portfolio'),
        'show_in_rest'       => true, // для Gutenberg и REST API
    );

    register_post_type('wpgenerate_portfolio', $args);
}
add_action('init', 'wpgenerate_register_portfolio_cpt');

Этот код создаст новый раздел в админке с названием «Портфолио». Записи этого типа будут иметь собственный URL с префиксом /portfolio/. Также включена поддержка миниатюр, редактора и пользовательских полей.

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

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

Вот пример добавления таксономии «Тип проекта» для нашего портфолио:

function wpgenerate_register_portfolio_taxonomy() {
    $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('wpgenerate_project_type', array('wpgenerate_portfolio'), $args);
}
add_action('init', 'wpgenerate_register_portfolio_taxonomy');

Теперь вы сможете присваивать записи портфолио различные типы, что облегчит навигацию и фильтрацию.

Плагины для создания и управления CPT

Если не хочется писать код, можно использовать плагины для создания CPT и таксономий:

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

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

Вывод записей собственного типа на фронтенде

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

$args = array(
    'post_type' => 'wpgenerate_portfolio',
    'posts_per_page' => 5
);
$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();

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

Создание шаблонов для собственного типа поста

Для индивидуального отображения записей CPT можно создать отдельные шаблоны в теме. Для типа поста wpgenerate_portfolio WordPress автоматически ищет:

  • single-wpgenerate_portfolio.php — шаблон одиночной записи типа портфолио.
  • archive-wpgenerate_portfolio.php — шаблон архивной страницы типа портфолио.

Создайте эти файлы в папке темы и оформите вывод по своему усмотрению, подключая необходимые поля и таксономии.

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

1. Используйте префиксы в названиях функций и типов (например, wpgenerate_), чтобы избежать конфликтов с плагинами и темами.

2. Обязательно добавляйте поддержку REST API (show_in_rest => true) для совместимости с редактором Gutenberg и внешними сервисами.

3. Для сложных проектов комбинируйте CPT с пользовательскими полями (Custom Fields) через Advanced Custom Fields или встроенные мета-поля.

4. Тестируйте работу permalink и делайте сброс постоянных ссылок в админке после регистрации CPT.

5. Не забудьте про SEO: настройте уникальные заголовки и метаданные для новых типов записей.

Итог

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

Как удалить старые ревизии постов в WordPress без плагинов
25.12.2025
WooCommerce: автоматическое удаление неактивных заказов по дате
20.06.2026
Как автоматически изменять заголовки и метаданные для SEO в WordPress
14.01.2026
Автоматическое удаление старых терминов в WordPress
23.03.2026
Как автоматически удалять неактивные вариации товаров в WooCommerce с помощью кода
07.05.2026