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

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

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

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

Например, для сайта expert-review.ru, где публикуются экспертные обзоры, можно создать тип записи expert_review, чтобы отделить отзывы и обзоры от обычных новостей или блог-постов.

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

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

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

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

function expertreview_register_cpt() {
    $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' => 'reviews'),
        'show_in_rest'       => true, // Поддержка Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail', 'comments'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-star-filled',
        'capability_type'    => 'post',
    );

    register_post_type('expert_review', $args);
}
add_action('init', 'expertreview_register_cpt');

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

Добавление кастомных полей и метабоксов для типа записи

Для расширения возможностей CPT полезно добавлять пользовательские поля. Например, для отзыва можно добавить поле «Оценка эксперта». Рассмотрим, как добавить метабокс с полем оценки.

function expertreview_add_meta_box() {
    add_meta_box(
        'expertreview_score',
        'Оценка эксперта',
        'expertreview_score_meta_box_callback',
        'expert_review',
        'side'
    );
}
add_action('add_meta_boxes', 'expertreview_add_meta_box');

function expertreview_score_meta_box_callback($post) {
    wp_nonce_field('expertreview_save_meta_box_data', 'expertreview_meta_box_nonce');
    $value = get_post_meta($post->ID, '_expertreview_score', true);
    echo '<label for="expertreview_score_field">Оценка (от 1 до 10): </label>';
    echo '<input type="number" id="expertreview_score_field" name="expertreview_score_field" min="1" max="10" value="' . esc_attr($value) . '" size="4" />';
}

function expertreview_save_meta_box_data($post_id) {
    if (!isset($_POST['expertreview_meta_box_nonce'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['expertreview_meta_box_nonce'], 'expertreview_save_meta_box_data')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (!isset($_POST['expertreview_score_field'])) {
        return;
    }
    $score = sanitize_text_field($_POST['expertreview_score_field']);
    update_post_meta($post_id, '_expertreview_score', $score);
}
add_action('save_post', 'expertreview_save_meta_box_data');

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

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

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

function expertreview_reviews_shortcode($atts) {
    $args = array(
        'post_type' => 'expert_review',
        'posts_per_page' => 10,
    );
    $query = new WP_Query($args);
    if (!$query->have_posts()) {
        return '<p>Отзывы не найдены.</p>';
    }
    $output = '<ul class="expert-reviews-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $score = get_post_meta(get_the_ID(), '_expertreview_score', true);
        $output .= '<li><strong>' . get_the_title() . '</strong> — Оценка: ' . esc_html($score) . '/10<br/>' . get_the_excerpt() . '</li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';
    return $output;
}
add_shortcode('expert_reviews', 'expertreview_reviews_shortcode');

Используйте шорткод [expert_reviews] на страницах или в записях, чтобы вывести список отзывов с оценками.

Дополнительные советы и плагины для работы с Custom Post Types

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

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

Также стоит помнить, что для полноценной поддержки CPT в теме могут понадобиться отдельные шаблоны, например archive-expert_review.php для отображения архива и single-expert_review.php для отдельной записи.

Использование хука checkout_validate в WooCommerce для дополнительной валидации формы оформления заказа
19.04.2026
Исключение критических ошибок PHP в WordPress без остановки сайта
23.04.2026
Как использовать REST API для автоматического добавления отзывов в WordPress
20.02.2026
Как удалить комментарии из базы данных WordPress без потери данных
05.04.2026
Как автоматически удалять старые отзывы в WordPress
08.04.2026