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

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

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

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

Использование собственного типа записей позволяет:

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

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

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

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

Пример регистрации простого типа записей «Книги» для сайта библиотеки:

function wpwp_register_cpt_books() {
    $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' => 'books'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'comments')
    );

    register_post_type('wpwp_books', $args);
}
add_action('init', 'wpwp_register_cpt_books');

В этом коде мы создаём CPT с ярлыком «wpwp_books». Важно давать уникальное название, чтобы избежать конфликтов с другими плагинами и темами.

Пояснение основных параметров

  • public — делает тип видимым на сайте и в админке;
  • supports — задаёт, какие возможности будут доступны (заголовок, редактор, миниатюры и т.д.);
  • rewrite — настройки ЧПУ, чтобы URL были красивыми и понятными;
  • has_archive — позволяет создать архивную страницу для типа записей;
  • menu_position — позиция пункта меню в админке.

Настройка мета-полей для Custom Post Type

Чтобы дополнительно расширить данные для вашего типа записей, например добавить автора книги, год издания или жанр, нужно использовать мета-поля. Их можно реализовать вручную или через плагины, например Clearfy Pro для оптимизации и управления.

Рассмотрим пример простого добавления мета-поля «Год издания» через код:

function wpwp_add_books_meta_box() {
    add_meta_box(
        'wpwp_books_year',
        'Год издания',
        'wpwp_render_books_year_meta_box',
        'wpwp_books',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'wpwp_add_books_meta_box');

function wpwp_render_books_year_meta_box($post) {
    // Используем nonce для проверки при сохранении
    wp_nonce_field('wpwp_books_year_nonce', 'wpwp_books_year_nonce_field');

    $value = get_post_meta($post->ID, '_wpwp_books_year', true);
    echo '<label for="wpwp_books_year_field">Введите год издания:</label>';
    echo '<input type="number" id="wpwp_books_year_field" name="wpwp_books_year_field" value="' . esc_attr($value) . '" min="1000" max="2100" style="width:100%;">';
}

function wpwp_save_books_year_meta($post_id) {
    if (!isset($_POST['wpwp_books_year_nonce_field']) || !wp_verify_nonce($_POST['wpwp_books_year_nonce_field'], 'wpwp_books_year_nonce')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpwp_books_year_field'])) {
        update_post_meta($post_id, '_wpwp_books_year', intval($_POST['wpwp_books_year_field']));
    }
}
add_action('save_post', 'wpwp_save_books_year_meta');

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

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

Чтобы вывести записи вашего CPT на сайте, можно использовать стандартные WP-запросы (WP_Query). Например, чтобы вывести последние 5 книг:

$args = array(
    'post_type' => 'wpwp_books',
    'posts_per_page' => 5
);
$query = new WP_Query($args);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_excerpt() . '</div>';
        $year = get_post_meta(get_the_ID(), '_wpwp_books_year', true);
        if ($year) {
            echo '<p>Год издания: ' . esc_html($year) . '</p>';
        }
    }
    wp_reset_postdata();
} else {
    echo 'Книги не найдены';
}

Для полноценной темы можно создать отдельный файл шаблона single-wpwp_books.php, который будет отвечать за вывод одной записи типа «Книга».

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

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

Плагины для работы с Custom Post Type

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

  • Custom Post Type UI — интерфейс для создания и настройки типов записей;
  • Advanced Custom Fields (ACF) — мощный плагин для создания мета-полей любого типа;
  • Pods — комплексный инструмент для управления CPT, таксономиями и полями;
  • Clearfy Pro — содержит дополнительные опции для оптимизации и расширения WordPress, в том числе управление CPT.

Использование плагинов экономит время, но знание ручной регистрации CPT даёт больше контроля и гибкости.

Особенности и рекомендации по использованию Custom Post Type

Некоторые моменты, которые стоит учитывать при работе с CPT:

  • Уникальные ярлыки: всегда используйте уникальный префикс в названии типа, например, wpwp_ — это убережёт от конфликтов.
  • ЧПУ и пермалинки: после регистрации CPT не забудьте обновить структуру постоянных ссылок (Настройки → Постоянные ссылки), иначе ссылки могут не работать.
  • Поддержка таксономий: CPT может поддерживать категории и метки, а можно создавать свои таксономии для более точной классификации.
  • Безопасность: проверяйте nonce и права пользователя при сохранении мета-данных, чтобы избежать уязвимостей.

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

Как отключить emoji в WordPress и убрать лишние запросы
19.08.2026
Как запретить копирование текста в WordPress
29.09.2026
Как убрать 404-страницы из XML sitemap в WordPress
03.09.2026
Как удалить meta robots из WordPress на конкретных страницах
29.09.2026
Как отключить автообновления плагинов в WordPress
26.09.2026