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

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

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

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

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

Кроме того, CPT поддерживают собственные таксономии, шаблоны вывода и могут быть интегрированы с плагинами для расширения функционала.

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

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

function wpcore_register_cpt_book() {
    $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'       => 'Искать книги',
        'not_found'          => 'Книг не найдено',
        'not_found_in_trash' => 'Книг не найдено в корзине'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'books'),
        'supports'           => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'show_in_rest'       => true,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-book',
        'taxonomies'         => array('category', 'post_tag'),
    );

    register_post_type('wpcore_book', $args);
}
add_action('init', 'wpcore_register_cpt_book');

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

Обратите внимание на префикс wpcore_ в названии функции и идентификаторе CPT — это хорошая практика для избегания конфликтов.

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

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

Если же вы хотите сделать это вручную, можно использовать функции WordPress для работы с метаданными. Пример добавления поля "Автор" к CPT "Книга":

function wpcore_add_book_meta_box() {
    add_meta_box('wpcore_book_author', 'Автор книги', 'wpcore_book_author_callback', 'wpcore_book', 'normal', 'high');
}
add_action('add_meta_boxes', 'wpcore_add_book_meta_box');

function wpcore_book_author_callback($post) {
    $author = get_post_meta($post->ID, '_wpcore_book_author', true);
    echo '<label for="wpcore_book_author">Имя автора:</label>';
    echo '<input type="text" id="wpcore_book_author" name="wpcore_book_author" value="' . esc_attr($author) . '" size="25" />';
}

function wpcore_save_book_author_meta($post_id) {
    if (array_key_exists('wpcore_book_author', $_POST)) {
        update_post_meta($post_id, '_wpcore_book_author', sanitize_text_field($_POST['wpcore_book_author']));
    }
}
add_action('save_post', 'wpcore_save_book_author_meta');

Этот код добавляет метабокс в редактор записи типа "Книга", где можно указать имя автора, и сохраняет это значение при сохранении записи.

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

Для отображения CPT на сайте создайте шаблон archive-wpcore_book.php в папке вашей темы. В этом файле можно вывести список книг с необходимыми полями:

<?php get_header(); ?>

<h1>Список книг</h1>

<?php if (have_posts()) : ?>
    <ul>
    <?php while (have_posts()) : the_post(); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            <?php $author = get_post_meta(get_the_ID(), '_wpcore_book_author', true); ?>
            <p>Автор: <?php echo esc_html($author); ?></p>
        </li>
    <?php endwhile; ?>
    </ul>
<?php else : ?>
    <p>Книги не найдены.</p>
<?php endif; ?>

<?php get_footer(); ?>

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

Использование плагинов для создания CPT

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

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

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

Советы по работе с пользовательскими типами записей

При создании CPT важно придерживаться нескольких правил:

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

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

WooCommerce: как автоматически удалять неактивные вариации товаров
25.05.2026
Как удалить неактивных пользователей WordPress с помощью скрипта
17.01.2026
Как удалить заблокированные пользователи WordPress
18.02.2026
WooCommerce: автоматическое удаление неактивных вариаций товаров
31.05.2026
Оптимизация базы данных WordPress: эффективные методы и примеры кода
15.11.2025