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

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

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

Индивидуальные типы постов — это структуры данных, которые можно создавать в WordPress для хранения и организации контента, отличного от стандартных записей и страниц. Например, если у вас сайт с каталогом книг, то логично создать тип поста "Книга" с уникальными полями вроде автора, года издания и жанра.

Использование CPT позволяет:

  • Разделять разные виды контента для удобства управления.
  • Настраивать отдельные шаблоны вывода.
  • Добавлять метаполя для хранения специфичных данных.
  • Использовать отдельные таксономии (категории и теги).

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

Для регистрации CPT в WordPress используется функция register_post_type(). Рассмотрим пример создания типа поста "Книга".

function wpkit_register_post_type_book() {
    $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,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'books'),
        'show_in_rest'       => true, // поддержка Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-book',
    );

    register_post_type('wpkit_book', $args);
}
add_action('init', 'wpkit_register_post_type_book');

Этот код создаст новый тип поста "Книга", который будет доступен в админке WordPress с поддержкой основного редактора и миниатюр.

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

Чтобы расширить тип поста дополнительными полями, можно использовать add_meta_box() для добавления метабоксов в админку, а затем сохранить данные с помощью хука save_post. Рассмотрим, как добавить поле "Автор книги" и "Год издания" для нашего типа "Книга".

Создание метабокса

function wpkit_add_book_meta_boxes() {
    add_meta_box(
        'wpkit_book_details', // ID метабокса
        'Детали книги',       // Заголовок
        'wpkit_render_book_meta_box', // Callback выводящий HTML
        'wpkit_book',          // Тип поста
        'normal',
        'default'
    );
}
add_action('add_meta_boxes', 'wpkit_add_book_meta_boxes');

function wpkit_render_book_meta_box($post) {
    // Безопасность
    wp_nonce_field('wpkit_save_book_meta', 'wpkit_book_meta_nonce');

    $author = get_post_meta($post->ID, '_wpkit_book_author', true);
    $year = get_post_meta($post->ID, '_wpkit_book_year', true);

    echo '<p><label for="wpkit_book_author">Автор книги:</label><br />';
    echo '<input type="text" id="wpkit_book_author" name="wpkit_book_author" value="' . esc_attr($author) . '" size="25" /></p>';

    echo '<p><label for="wpkit_book_year">Год издания:</label><br />';
    echo '<input type="number" id="wpkit_book_year" name="wpkit_book_year" value="' . esc_attr($year) . '" size="4" /></p>';
}

Сохранение метаданных

function wpkit_save_book_meta($post_id) {
    if (!isset($_POST['wpkit_book_meta_nonce']) || !wp_verify_nonce($_POST['wpkit_book_meta_nonce'], 'wpkit_save_book_meta')) {
        return;
    }

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    if (isset($_POST['wpkit_book_author'])) {
        update_post_meta($post_id, '_wpkit_book_author', sanitize_text_field($_POST['wpkit_book_author']));
    }

    if (isset($_POST['wpkit_book_year'])) {
        update_post_meta($post_id, '_wpkit_book_year', intval($_POST['wpkit_book_year']));
    }
}
add_action('save_post', 'wpkit_save_book_meta');

Вывод индивидуальных типов постов с метаполями на фронтенде

Для вывода кастомных типов постов с метаполями в шаблонах используйте WP_Query и функции получения метаданных.

$args = array(
    'post_type' => 'wpkit_book',
    'posts_per_page' => 10
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<div class="book-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $author = get_post_meta(get_the_ID(), '_wpkit_book_author', true);
        $year = get_post_meta(get_the_ID(), '_wpkit_book_year', true);

        echo '<div class="book-item">';
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<p>Автор: ' . esc_html($author) . '</p>';
        echo '<p>Год издания: ' . esc_html($year) . '</p>';
        echo '<div class="content">' . get_the_content() . '</div>';
        echo '</div>';
    }
    echo '</div>';
    wp_reset_postdata();
} else {
    echo '<p>Книги не найдены.</p>';
}

Полезные плагины для работы с CPT и метаполями

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

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

Заключение по теме создания CPT с метаполями

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

Автоматизация создания и удаления тем в WordPress через код
22.01.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате с поддержкой купонов
10.07.2026
Как создать автоматически обновляемый сайт на WordPress с помощью WPRemark
12.03.2026
WooCommerce: как автоматически блокировать оплату при наличии товаров с определёнными атрибутами в корзине
19.06.2026
Как удалить не удаляемые плагины в WordPress: эффективные методы
20.11.2025