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

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

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

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

  • Чётко структурировать контент;
  • Использовать отдельные шаблоны отображения;
  • Добавлять специфичные метаданные и таксономии;
  • Упрощать управление контентом в админке.

Для регистрации собственного типа записи в WordPress используется функция register_post_type. Рассмотрим её на примере.

Регистрация своего типа записи в WordPress с помощью register_post_type

Создадим CPT для "Отзывы". Добавим код в файл functions.php вашей темы или в отдельный плагин:

function wp7_register_post_type_reviews() {
    $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' => 'reviews'),
        'show_in_rest'       => true,
        'supports'           => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'menu_position'      => 20,
        'menu_icon'          => 'dashicons-testimonial',
    );

    register_post_type('wp7_review', $args);
}
add_action('init', 'wp7_register_post_type_reviews');

Объяснение параметров:

  • labels — набор названий для интерфейса;
  • public — видимость для пользователей и фронтенда;
  • has_archive — наличие архивной страницы;
  • rewrite — настройка ЧПУ;
  • show_in_rest — поддержка Gutenberg и REST API;
  • supports — функциональность (заголовок, редактор, миниатюра, произвольные поля);
  • menu_icon — иконка в админке.

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

По умолчанию WordPress пытается подгрузить шаблон single-{post_type}.php для одиночных записей и archive-{post_type}.php для архивов. Например, для нашего типа записи wp7_review можно создать файлы:

  • single-wp7_review.php — шаблон одиночного отзыва;
  • archive-wp7_review.php — шаблон страницы архива отзывов.

Если этих файлов нет, WordPress отдаст fallback на single.php и archive.php соответственно.

Пример простого шаблона одиночной записи (файл single-wp7_review.php):

<?php get_header(); ?>

<?php if(have_posts()): while(have_posts()): the_post(); ?>
    <h1><?php the_title(); ?></h1>
    <div class="review-content"><?php the_content(); ?></div>
    <?php if(has_post_thumbnail()): ?>
        <div class="review-thumbnail"><?php the_post_thumbnail('medium'); ?></div>
    <?php endif; ?>
<?php endwhile; endif; ?>

<?php get_footer(); ?>

Работа с метаданными: добавление и вывод произвольных полей

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

Добавим метабокс с рейтингом отзыва (от 1 до 5):

function wp7_add_meta_box_review_rating() {
    add_meta_box(
        'wp7_review_rating',
        'Рейтинг отзыва',
        'wp7_meta_box_review_rating_callback',
        'wp7_review',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'wp7_add_meta_box_review_rating');

function wp7_meta_box_review_rating_callback($post) {
    wp_nonce_field('wp7_save_review_rating', 'wp7_review_rating_nonce');
    $value = get_post_meta($post->ID, '_wp7_review_rating', true);
    echo '<label for="wp7_review_rating_field">Рейтинг (1-5):</label> ';
    echo '<input type="number" id="wp7_review_rating_field" name="wp7_review_rating_field" min="1" max="5" value="' . esc_attr($value) . '" />';
}

function wp7_save_review_rating_meta($post_id) {
    if (!isset($_POST['wp7_review_rating_nonce']) || !wp_verify_nonce($_POST['wp7_review_rating_nonce'], 'wp7_save_review_rating')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wp7_review_rating_field'])) {
        $rating = intval($_POST['wp7_review_rating_field']);
        if ($rating >= 1 && $rating <= 5) {
            update_post_meta($post_id, '_wp7_review_rating', $rating);
        } else {
            delete_post_meta($post_id, '_wp7_review_rating');
        }
    }
}
add_action('save_post', 'wp7_save_review_rating_meta');

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

Для вывода рейтинга в шаблоне используйте:

$rating = get_post_meta(get_the_ID(), '_wp7_review_rating', true);
echo '<p>Рейтинг: ' . esc_html($rating) . ' из 5</p>';

Использование плагина Clearfy Pro для оптимизации и управления CPT

Если вы хотите расширить возможности управления собственными типами записей, рекомендую обратить внимание на плагин Clearfy Pro. Он позволяет:

  • Автоматически создавать CPT и таксономии без кода;
  • Оптимизировать загрузку и работу CPT;
  • Управлять правами доступа к типам записей;
  • Интегрироваться с SEO и кешированием.

Использование готовых решений значительно экономит время и снижает вероятность ошибок.

Как использовать шаблоны для архивов и фильтрация записей CPT

Архивный шаблон archive-wp7_review.php может содержать логику для вывода списка отзывов с пагинацией и фильтрами. Пример простого кода для архива:

<?php get_header(); ?>

<h1>Отзывы</h1>

<?php if(have_posts()): ?>
    <div class="reviews-list">
    <?php while(have_posts()): the_post(); ?>
        <article id="post-<?php the_ID(); ?>" class="review-item">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div class="excerpt"><?php the_excerpt(); ?></div>
        </article>
    <?php endwhile; ?>
    </div>

    <?php the_posts_pagination(); ?>

<?php else: ?>
    <p>Отзывов пока нет.</p>
<?php endif; ?>

<?php get_footer(); ?>
<

Для реализации фильтрации можно использовать WP_Query с параметрами, например, по рейтингу:

$args = array(
    'post_type' => 'wp7_review',
    'meta_key' => '_wp7_review_rating',
    'meta_value' => 4,
    'meta_compare' => '>='
);
$query = new WP_Query($args);

Заключение: преимущества использования собственных типов записей с метаданными

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

Для ускорения разработки и оптимизации управления рекомендуем использовать Clearfy Pro, который интегрируется с WordPress и помогает управлять CPT без лишнего кода.

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

Как удалить корзину WooCommerce из меню без плагинов
29.04.2026
Оптимизация запросов к мета-записям в WordPress
16.02.2026
WooCommerce: запрет покупки товара для неавторизованных пользователей
13.05.2026
Как сделать динамические заголовки H1 в WordPress для улучшения SEO
24.01.2026
Как изменить регистр слагов в WordPress
04.12.2025