Как создать Custom Post Type в WordPress с примерами кода

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

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

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

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

Основные преимущества CPT:

  • Отделение различных типов контента друг от друга.
  • Упрощение навигации для пользователя и администратора.
  • Возможность добавлять уникальные мета-поля и таксономии.
  • Управление правами доступа и поведением в админке.

Регистрация Custom Post Type в WordPress с помощью функции wp8_register_custom_post_type()

Для регистрации CPT используется функция register_post_type(). Мы создадим нашу функцию с префиксом wp8_ для избежания конфликтов.

function wp8_register_custom_post_type() {
    $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' => 'otzyvy'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-testimonial',
        'supports'           => array('title', 'editor', 'author', 'thumbnail', 'comments'),
    );

    register_post_type('wp8_otzyvy', $args);
}
add_action('init', 'wp8_register_custom_post_type');

Разберём основные параметры:

  • labels — массив с названиями для интерфейса админки.
  • public — делает CPT видимым на фронтенде.
  • rewrite — настройка ЧПУ, в нашем случае otzyvy.
  • supports — подключаемые функции (заголовок, редактор, миниатюра, комментарии и т.д.).
  • menu_icon — иконка в меню админки.

Добавление мета-полей к Custom Post Type

Часто стандартных полей для CPT недостаточно. Для отзывов, например, полезно добавить поле с рейтингом. Для этого используем мета-боксы.

Создадим мета-бокс с полем «Рейтинг» от 1 до 5:

function wp8_add_meta_box_rating() {
    add_meta_box(
        'wp8_meta_rating',
        'Рейтинг',
        'wp8_meta_box_callback',
        'wp8_otzyvy',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'wp8_add_meta_box_rating');

function wp8_meta_box_callback($post) {
    wp_nonce_field('wp8_save_meta_box_data', 'wp8_meta_box_nonce');
    $value = get_post_meta($post->ID, '_wp8_rating', true);
    echo '<label for="wp8_rating_field">Оценка (1-5): </label>';
    echo '<input type="number" id="wp8_rating_field" name="wp8_rating_field" value="' . esc_attr($value) . '" min="1" max="5" step="1" />';
}

function wp8_save_meta_box_data($post_id) {
    if (!isset($_POST['wp8_meta_box_nonce'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['wp8_meta_box_nonce'], 'wp8_save_meta_box_data')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (!isset($_POST['wp8_rating_field'])) {
        return;
    }
    $rating = intval($_POST['wp8_rating_field']);
    if ($rating < 1) $rating = 1;
    if ($rating > 5) $rating = 5;
    update_post_meta($post_id, '_wp8_rating', $rating);
}
add_action('save_post', 'wp8_save_meta_box_data');

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

Вывод Custom Post Type на странице сайта: примеры запросов WP_Query и шаблонов

Чтобы вывести отзывы на странице, удобно использовать класс WP_Query. Например, создадим отдельный шаблон для вывода всех отзывов с рейтингом:

$args = array(
    'post_type' => 'wp8_otzyvy',
    'posts_per_page' => 10,
    'meta_key' => '_wp8_rating',
    'orderby' => 'meta_value_num',
    'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()) {
    echo '<ul class="wp8-otzyvy-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $rating = get_post_meta(get_the_ID(), '_wp8_rating', true);
        echo '<li><h3>' . get_the_title() . '</h3>';
        echo '<div class="content">' . get_the_content() . '</div>';
        echo '<div class="rating">Рейтинг: ' . intval($rating) . '/5</div></li>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo '<p>Отзывы не найдены.</p>';
}

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

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

Хотя регистрация CPT через код — лучший способ для разработчиков, иногда удобнее использовать плагины, особенно на этапе прототипирования:

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

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

Резюме по созданию Custom Post Type на WP8.ru

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

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

Как удалить неиспользуемые таксономии в WordPress без плагина
18.04.2026
Как сделать отложенный запуск функции в WordPress: практические примеры и код
23.02.2026
Как создать функцию автоматической отправки Email в WordPress с примерами кода
21.03.2026
WooCommerce: автоматическое изменение стоимости товаров по ролям пользователей
07.05.2026
Как сделать отзывы с фотографиями в WordPress: плагины и примеры кода
07.03.2026