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

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

Что такое пользовательский тип записи и зачем он нужен

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

Например, если вы хотите создать сайт с каталогом книг, вам нужен тип записи «Книга» с полями «Автор», «Год издания», «Жанр» и т.д. Благодаря CPT вы сможете удобно управлять таким контентом и выводить его на сайте.

Создавать CPT можно двумя основными способами: с помощью плагинов и вручную, через код. Ниже рассмотрим оба варианта.

Создание пользовательского типа записи с помощью плагина

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

  • Custom Post Type UI — простой и интуитивно понятный интерфейс для создания CPT и таксономий;
  • Pods — мощный инструмент, кроме CPT позволяет создавать пользовательские поля и связи между записями.

Например, чтобы создать CPT «Книги» в Custom Post Type UI:

  1. Установите и активируйте плагин.
  2. Перейдите в меню «CPT UI» → «Add/Edit Post Types».
  3. В поле «Post Type Slug» введите books.
  4. Задайте название, например, «Книги».
  5. Настройте параметры (включая поддержку редактора, изображений, комментариев и т.д.).
  6. Сохраните изменения.

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

Создание пользовательского типа записи вручную через код

Для более тонкой настройки лучше создавать CPT через functions.php вашей темы или в собственном плагине. Вот базовый пример регистрации типа записи «books».

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

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

Добавление пользовательских полей к типу записи

Чаще всего одного типа записи недостаточно — нужны дополнительные поля для хранения информации, например, у книги — автор, ISBN, год выпуска. Для этого можно использовать плагин Advanced Custom Fields (ACF) или добавить мета-поля вручную.

Пример добавления мета-полей вручную

Ниже пример, как добавить поле «Автор» при редактировании записи типа «books»:

function wpbit_add_books_meta_box() {
    add_meta_box(
        'wpbit_books_author',
        'Автор книги',
        'wpbit_books_author_meta_box_callback',
        'books',
        'normal',
        'high'
    );
}
add_action( 'add_meta_boxes', 'wpbit_add_books_meta_box' );

function wpbit_books_author_meta_box_callback( $post ) {
    wp_nonce_field( 'wpbit_save_books_author_data', 'wpbit_books_author_meta_box_nonce' );
    $value = get_post_meta( $post->ID, '_wpbit_books_author', true );
    echo '<label for="wpbit_books_author_field">Автор: </label>';
    echo '<input type="text" id="wpbit_books_author_field" name="wpbit_books_author_field" value="' . esc_attr( $value ) . '" size="25" />';
}

function wpbit_save_books_author_data( $post_id ) {
    if ( ! isset( $_POST['wpbit_books_author_meta_box_nonce'] ) ) {
        return;
    }
    if ( ! wp_verify_nonce( $_POST['wpbit_books_author_meta_box_nonce'], 'wpbit_save_books_author_data' ) ) {
        return;
    }
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( isset( $_POST['wpbit_books_author_field'] ) ) {
        $author_data = sanitize_text_field( $_POST['wpbit_books_author_field'] );
        update_post_meta( $post_id, '_wpbit_books_author', $author_data );
    }
}
add_action( 'save_post', 'wpbit_save_books_author_data' );

В этом примере при редактировании книги появится поле «Автор», данные которого сохраняются в метаполе _wpbit_books_author. Такой подход требует базовых знаний PHP и WordPress API.

Вывод пользовательских записей на сайте

После создания CPT и добавления данных важно грамотно вывести их на фронтенде. Для этого можно создать отдельные шаблоны или использовать WP_Query.

Пример вывода списка книг

$args = array(
    'post_type' => 'books',
    'posts_per_page' => 10
);
$books_query = new WP_Query( $args );

if ( $books_query->have_posts() ) {
    echo '<ul>';
    while ( $books_query->have_posts() ) {
        $books_query->the_post();
        $author = get_post_meta( get_the_ID(), '_wpbit_books_author', true );
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a> — Автор: ' . esc_html( $author ) . '</li>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo 'Книги не найдены.';
}

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

Советы и лучшие практики при работе с CPT

  • Используйте префиксы для функций и метаполей, чтобы избежать конфликтов (например, wpbit_ как в примерах выше).
  • Регистрация CPT должна происходить на хуке init, чтобы WordPress корректно обработал новый тип записи.
  • Для сложных проектов используйте плагины ACF или Meta Box для удобного создания и управления мета-полями.
  • Не забывайте про перезапись правил (flush_rewrite_rules) при добавлении нового CPT, чтобы ссылки работали корректно. Обычно это делается один раз после активации темы или плагина:
function wpbit_flush_rewrite_on_activation() {
    wpbit_register_cpt_books();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'wpbit_flush_rewrite_on_activation' );

Если вы добавляете CPT в functions.php темы, достаточно перейти в админке в меню «Настройки» → «Постоянные ссылки» и нажать «Сохранить», чтобы перезаписать правила.

Заключение

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

WooCommerce: как автоматически удалять товары без заказов за указанный период
13.06.2026
Как удалить категории без записей в WordPress автоматически
19.02.2026
WooCommerce: как автоматически изменять статус заказа по условиям
29.05.2026
WooCommerce: как автоматически удалять товары без продаж за указанный период
22.05.2026
Автоматическое создание и обновление главных меню в WordPress
16.04.2026