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

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

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

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

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

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

Основные преимущества использования Custom Post Types

  • Чистая структура данных и удобство управления в админке.
  • Возможность создавать уникальные поля и метаданные для каждого типа контента.
  • Отдельные шаблоны для вывода на фронтенде.
  • Улучшение SEO за счёт правильной организации контента.
  • Расширение функционала без необходимости создавать отдельную CMS.

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

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

function wpmy_register_reviews_cpt() {
  $labels = array(
    'name' => 'Отзывы',
    'singular_name' => 'Отзыв',
    'add_new' => 'Добавить отзыв',
    'add_new_item' => 'Добавить новый отзыв',
    'edit_item' => 'Редактировать отзыв',
    'new_item' => 'Новый отзыв',
    'view_item' => 'Просмотр отзыва',
    'search_items' => 'Поиск отзывов',
    'not_found' => 'Отзывы не найдены',
    'not_found_in_trash' => 'В корзине отзывов не найдено',
    'menu_name' => 'Отзывы'
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'reviews'),
    'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments'),
    'show_in_rest' => true,
    'menu_position' => 5,
    'menu_icon' => 'dashicons-testimonial'
  );
  register_post_type('wpmy_reviews', $args);
}
add_action('init', 'wpmy_register_reviews_cpt');

В этом примере мы создаём новый тип записи с названием "Отзывы" и ключом wpmy_reviews. Обратите внимание на префикс wpmy_ — хорошая практика для избежания конфликтов с другими CPT и плагинами.

Параметр supports указывает, какие стандартные возможности записи будут доступны. Включена поддержка REST API (show_in_rest), что важно для современных проектов.

Регистрация таксономий для собственных типов записей

Часто для CPT требуется создать собственные таксономии, например категории или теги для отзывов. Регистрация таксономии делается через функцию register_taxonomy().

function wpmy_register_review_categories() {
  $labels = array(
    'name' => 'Категории отзывов',
    'singular_name' => 'Категория отзыва',
    'search_items' => 'Искать категории отзывов',
    'all_items' => 'Все категории',
    'edit_item' => 'Редактировать категорию',
    'add_new_item' => 'Добавить новую категорию',
    'menu_name' => 'Категории отзывов'
  );
  $args = array(
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'show_in_rest' => true,
    'rewrite' => array('slug' => 'review-category')
  );
  register_taxonomy('wpmy_review_cat', array('wpmy_reviews'), $args);
}
add_action('init', 'wpmy_register_review_categories');

Теперь у отзывов появится своя иерархическая таксономия "Категории отзывов" с поддержкой REST API и красивым слагом для URL.

Вывод собственных типов записей на сайте: шаблоны и WP_Query

После регистрации CPT и таксономий нужно вывести их на сайте. Для этого создаются специальные шаблоны в теме WordPress:

  • archive-wpmy_reviews.php — для страницы архива отзывов.
  • single-wpmy_reviews.php — для отдельного отзыва.

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

Пример простого цикла вывода последних 5 отзывов с категорией "Рекомендации":

$args = array(
  'post_type' => 'wpmy_reviews',
  'posts_per_page' => 5,
  'tax_query' => array(
    array(
      'taxonomy' => 'wpmy_review_cat',
      'field' => 'slug',
      'terms' => 'recommendations'
    )
  )
);
$reviews_query = new WP_Query($args);
if ($reviews_query->have_posts()) {
  while ($reviews_query->have_posts()) {
    $reviews_query->the_post();
    echo '<h2>' . get_the_title() . '</h2>';
    the_content();
  }
  wp_reset_postdata();
} else {
  echo 'Отзывы не найдены';
}

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

Если вы хотите использовать CPT в headless-проектах или создавать SPA, важно, чтобы CPT были доступны через REST API. В примерах выше параметр show_in_rest включён, что автоматически позволяет работать с CPT через стандартные end-pointы WP API.

Можно получить список отзывов через запрос:

https://ваш-сайт.ru/wp-json/wp/v2/wpmy_reviews

Это открывает широкие возможности для интеграции с внешними приложениями и фронтенд-фреймворками.

Советы и лучшие практики при работе с собственными типами записей

  • Используйте префиксы для ключей CPT и таксономий, чтобы избежать конфликтов с другими плагинами.
  • Добавляйте поддержку нужных возможностей через параметр supports, чтобы не перегружать интерфейс админки.
  • Создавайте отдельные шаблоны для каждого CPT, чтобы максимально контролировать вывод.
  • Регулярно тестируйте REST API, если используете headless или AJAX-запросы.
  • Используйте плагины для упрощения — например, Advanced Custom Fields (ACF) для создания метаполей, или Custom Post Type UI для регистрации CPT через интерфейс.

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

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

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

Пример расширения CPT: добавление метаполей через код

Допустим, в отзывах нужно добавить поле "Оценка" от 1 до 5. Для этого можно использовать хук add_meta_boxes и сохранить данные через save_post. Пример:

function wpmy_add_review_meta_box() {
  add_meta_box(
    'wpmy_review_rating',
    'Оценка отзыва',
    'wpmy_review_rating_callback',
    'wpmy_reviews',
    'side'
  );
}
add_action('add_meta_boxes', 'wpmy_add_review_meta_box');

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

function wpmy_save_review_rating($post_id) {
  if (array_key_exists('wpmy_review_rating_field', $_POST)) {
    update_post_meta(
      $post_id,
      '_wpmy_review_rating',
      intval($_POST['wpmy_review_rating_field'])
    );
  }
}
add_action('save_post', 'wpmy_save_review_rating');

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

Итоги

Создание и использование собственных типов записей — обязательный навык для продвинутого разработчика WordPress. Это позволяет создавать удобные и мощные сайты с уникальной структурой контента.

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

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

Как отключить AJAX в WooCommerce для разных страниц сайта
24.04.2026
Как создать динамическую функцию фильтра по мета полям в WordPress
06.03.2026
Как использовать WP-Cron для автоматизации задач в WordPress
14.01.2026
Автоматическое удаление нерабочих изображений в WordPress
13.04.2026
Как избежать конфликтов между WooCommerce и другими плагинами WordPress
27.04.2026