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

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

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

Custom Post Type — это тип записи, который создаётся разработчиком для хранения специфического контента. Например, если у вас сайт агентства, вы можете создать CPT «Проекты» для публикации кейсов. Это позволяет разделять разные виды информации и управлять ими независимо.

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

Регистрация собственного типа записей в WordPress

Для регистрации CPT используется функция register_post_type(). Лучше всего добавлять этот код в файл темы functions.php или в отдельный плагин. Вот базовый пример регистрации CPT «Проекты» на wpstart.ru:

function wpstart_register_projects_cpt() {
    $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' => 'projects'),
        'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest' => true, // поддержка Gutenberg
        'menu_position' => 5,
        'menu_icon' => 'dashicons-portfolio'
    );

    register_post_type('wpstart_project', $args);
}
add_action('init', 'wpstart_register_projects_cpt');

Этот код создаст новый тип записей с названием «Проекты», который будет отображаться в админке с иконкой портфолио.

Объяснение параметров

  • 'public' => true — запись видна и на фронтенде, и в админке.
  • 'has_archive' => true — создаёт архивную страницу по адресу /projects/.
  • 'supports' — какие стандартные возможности доступны (заголовок, редактор, миниатюры и т.д.).
  • 'show_in_rest' => true — добавляет поддержку редактора Gutenberg и REST API.
  • 'menu_icon' — иконка в меню админки.

Добавление мета-полей с помощью плагина Advanced Custom Fields

Для расширения CPT полезно добавить мета-поля — например, дату начала проекта, ссылку на сайт, статус. Самый удобный способ — плагин Advanced Custom Fields (ACF).

После установки ACF создайте группу полей и свяжите её с типом записи wpstart_project. Например, добавим поля:

  • Дата начала (тип Date Picker)
  • Ссылка на проект (тип URL)
  • Статус (тип Select: В разработке, Завершён)

На фронтенде вывести эти поля просто, используя функцию get_field():

function wpstart_display_project_meta() {
    $start_date = get_field('start_date');
    $project_url = get_field('project_url');
    $status = get_field('status');

    if ($start_date) {
        echo '<p><strong>Дата начала:</strong> ' . esc_html($start_date) . '</p>';
    }
    if ($project_url) {
        echo '<p><strong>Ссылка:</strong> <a href="' . esc_url($project_url) . '" target="_blank" rel="noopener">' . esc_html($project_url) . '</a></p>';
    }
    if ($status) {
        echo '<p><strong>Статус:</strong> ' . esc_html($status) . '</p>';
    }
}

Вызовите эту функцию в шаблоне single-wpstart_project.php, чтобы вывести информацию о проекте.

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

WordPress использует иерархию шаблонов для отображения CPT. Для нового типа записей wpstart_project можно создать файлы:

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

В этих файлах можно настраивать вывод так, как нужно. Например, в archive-wpstart_project.php можно реализовать вывод проектов с пагинацией и фильтрацией, а в single-wpstart_project.php — полное описание проекта с мета-полями.

Пример кода для архива с пагинацией

if (have_posts()) :
    while (have_posts()) : the_post();
        ?>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div><?php the_excerpt(); ?></div>
        <?php
    endwhile;

    the_posts_pagination(array(
        'prev_text' => 'Назад',
        'next_text' => 'Вперед',
    ));
else :
    echo '<p>Проекты не найдены.</p>';
endif;

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

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

Регистрация таксономии происходит с помощью register_taxonomy(). Пример:

function wpstart_register_project_taxonomy() {
    $labels = array(
        'name' => 'Типы проектов',
        'singular_name' => 'Тип проекта',
        'search_items' => 'Поиск типов',
        'all_items' => 'Все типы',
        'edit_item' => 'Редактировать тип',
        'add_new_item' => 'Добавить новый тип',
        'menu_name' => 'Типы проектов'
    );

    $args = array(
        'hierarchical' => true, // как категории
        'labels' => $labels,
        'show_ui' => true,
        'show_in_rest' => true,
        'rewrite' => array('slug' => 'project-type'),
    );

    register_taxonomy('wpstart_project_type', array('wpstart_project'), $args);
}
add_action('init', 'wpstart_register_project_taxonomy');

Теперь в админке можно создавать типы проектов и присваивать их записям.

Полезные плагины для работы с Custom Post Types

  • Advanced Custom Fields — для создания мета-полей и удобного управления ими.
  • Custom Post Type UI — интерфейс для регистрации CPT и таксономий без кода.
  • Code Snippets — для добавления кастомного кода безопасно и удобно.
Как создать динамическую таблицу в WordPress с помощью шорткода
02.12.2025
Как сделать автоматический импорт заданий из Яндекс Толока в WordPress
04.02.2026
Как создать автоматический отчет о ошибках в WordPress
18.12.2025
Как изменить HTML-разметку в WordPress без ущерба для SEO
27.12.2025
Как изменить авторские права в WordPress без кода
22.01.2026