В WordPress по умолчанию доступны несколько типов записей: записи (posts), страницы (pages), вложения (attachments), ревизии и меню. Однако для расширения функциональности сайта часто нужно создавать собственные типы записей (Custom Post Types, CPT), которые позволяют структурировать контент более гибко и удобно. В этой статье мы подробно разберем, как создать и использовать собственные типы записей в WordPress, а также приведем примеры кода и советы по работе с ними.
Что такое собственные типы записей в WordPress и зачем они нужны
Собственные типы записей — это пользовательские сущности, которые вы можете добавить в WordPress для хранения и отображения контента, отличного от стандартных записей и страниц. Например, если вы создаете сайт с каталогом товаров, отзывами, портфолио или мероприятиями, то собственные типы записей помогут логично разделить эти данные, облегчить их управление и вывод на сайте.
Преимущества использования CPT:
- Удобное разделение контента по смыслу.
- Возможность добавлять собственные поля и таксономии.
- Улучшение SEO за счет правильной структуры URL и метаданных.
- Гибкая настройка отображения в админке и на фронтенде.
Как зарегистрировать собственный тип записи в WordPress
Для регистрации CPT используется функция register_post_type(). Лучше всего добавлять регистрацию в файл functions.php вашей темы или в собственный плагин, чтобы не потерять изменения при обновлении темы.
Пример регистрации типа записи «Отзывы» с базовой настройкой:
add_action('init', 'wpfix_register_post_type_reviews');
function wpfix_register_post_type_reviews() {
$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' => 'otzyvy'),
'show_in_rest' => true, // поддержка Gutenberg
'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments'),
'menu_position' => 5,
'menu_icon' => 'dashicons-testimonial',
);
register_post_type('wpfix_reviews', $args);
}
В этом примере мы создали тип записи с идентификатором wpfix_reviews, который будет отображаться в админ-панели под названием «Отзывы» с удобными метками и иконкой.
Объяснение параметров функции register_post_type
labels— массив с текстами для разных элементов интерфейса.public— делает тип записи общедоступным (для фронтенда и админки).has_archive— включает архивную страницу для CPT.rewrite— управление URL, чтобы ссылки выглядели красиво (например, site.ru/otzyvy/).show_in_rest— поддержка редактора Gutenberg и REST API.supports— какие стандартные функции будут доступны (заголовок, редактор, миниатюры и т.д.).menu_positionиmenu_icon— позиция и иконка в меню админки.
Добавление пользовательских таксономий для собственного типа записей
Для удобной категоризации записей часто нужны собственные таксономии (например, категории и метки для стандартных записей). Создадим таксономию «Тип отзыва» для нашего CPT «Отзывы».
add_action('init', 'wpfix_register_taxonomy_review_type');
function wpfix_register_taxonomy_review_type() {
$labels = array(
'name' => 'Типы отзывов',
'singular_name' => 'Тип отзыва',
'search_items' => 'Искать типы отзывов',
'all_items' => 'Все типы отзывов',
'edit_item' => 'Редактировать тип отзыва',
'update_item' => 'Обновить тип отзыва',
'add_new_item' => 'Добавить новый тип отзыва',
'new_item_name' => 'Название нового типа отзыва',
'menu_name' => 'Типы отзывов',
);
$args = array(
'hierarchical' => true, // как категории
'labels' => $labels,
'show_ui' => true,
'show_in_rest' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'tip-otzyva'),
);
register_taxonomy('wpfix_review_type', array('wpfix_reviews'), $args);
}
Теперь при создании отзыва вы сможете указывать его тип, что упростит фильтрацию и вывод материалов на сайте.
Вывод собственных записей на фронтенде
Чтобы вывести записи CPT на сайте, можно использовать класс WP_Query. Пример запроса и вывода отзывов в шаблоне:
$args = array(
'post_type' => 'wpfix_reviews',
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC',
);
$reviews_query = new WP_Query($args);
if ($reviews_query->have_posts()) {
echo '<ul class="wpfix-reviews-list">';
while ($reviews_query->have_posts()) {
$reviews_query->the_post();
echo '<li><h3>' . get_the_title() . '</h3>';
echo '<div class="content">' . get_the_content() . '</div>';
echo '</li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo '<p>Отзывы не найдены.</p>';
}
Такой код можно вставить в любой шаблон темы, чтобы вывести последние 5 отзывов в удобном формате.
Фильтрация по таксономии
Если нужно вывести отзывы определенного типа, добавьте параметр tax_query:
$args = array(
'post_type' => 'wpfix_reviews',
'tax_query' => array(
array(
'taxonomy' => 'wpfix_review_type',
'field' => 'slug',
'terms' => 'pozitivnye',
),
),
);
Использование плагинов для создания и управления CPT
Если вы не хотите писать код или хотите расширенные возможности, можно использовать плагины. Среди популярных решений:
- WPFix Custom Post Type — легкий и удобный плагин для создания CPT и таксономий с визуальным интерфейсом.
- Custom Post Type UI — бесплатный плагин для управления типами записей и таксономиями без кода.
- Clearfy Pro — оптимизирует работу WordPress и позволяет управлять CPT и другими настройками сайта.
Важно: советы по работе с собственными типами записей
Чтобы избежать проблем и получить максимум пользы от CPT, следуйте рекомендациям:
- Используйте уникальные префиксы для идентификаторов (например,
wpfix_), чтобы избежать конфликтов с другими плагинами. - Поддерживайте совместимость с REST API, ставьте
show_in_rest => true, чтобы Gutenberg и сторонние приложения могли работать с CPT. - Регулярно обновляйте правила перезаписи ссылок — после регистрации CPT зайдите в админке в Настройки > Постоянные ссылки и нажмите «Сохранить изменения».
- Продумывайте структуру таксономий, чтобы они логично отражали типы и категории контента.
- Для сложных проектов создавайте отдельный плагин для CPT, а не прописывайте код в теме.