В 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.