WordPress изначально проектировался как платформа для блогов, где весь контент представлен в виде обычных записей и страниц. Однако для создания более сложных сайтов часто требуется использовать пользовательские типы записей (Custom Post Types, CPT). Они позволяют структурировать данные и выводить их отдельными блоками, что улучшает управление контентом и взаимодействие с пользователем.
Что такое пользовательские типы записей и зачем они нужны
Стандартные типы записей в WordPress — это posts (записи) и pages (страницы). Но если вы создаёте, например, каталог товаров, портфолио, отзывы или мероприятия, классические записи неудобны для этих задач. Создание CPT позволяет:
- Разделить контент по логическим блокам и типам;
- Настроить отдельные поля и таксономии для каждого типа;
- Облегчить вывод кастомного контента с помощью шаблонов и запросов WP_Query;
- Упорядочить админ-панель для удобства редакторов.
Иными словами, CPT — это мощный инструмент, который помогает превратить WordPress из блога в полноценную CMS.
Как зарегистрировать пользовательский тип записей вручную через functions.php
Самый популярный способ создания CPT — регистрация через функцию register_post_type() в вашем файле functions.php темы или в плагине. Рассмотрим на примере создания CPT «Отзывы».
function cyrtolat_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' => 'Искать отзывы',
'parent_item_colon' => '',
'not_found' => 'Отзывы не найдены.',
'not_found_in_trash' => 'В корзине отзывов не найдено.'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'reviews'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments'),
'show_in_rest' => true
);
register_post_type('reviews', $args);
}
add_action('init', 'cyrtolat_register_post_type_reviews');В этом коде мы создаём новый тип записей с названием «Отзывы». Обратите внимание на параметр 'supports', который определяет, какие стандартные возможности будут доступны для этого типа (заголовок, редактор, миниатюры и т.д.).
Пояснения к параметрам register_post_type
Параметры можно настраивать под свои задачи:
public— доступен ли тип записи на сайте;has_archive— разрешает ли архивную страницу для CPT;rewrite— настройки ЧПУ (человекопонятных URL);show_in_rest— нужен ли REST API и Gutenberg;- и другие — для полного контроля.
Использование плагинов для создания CPT без кода
Если вы не хотите писать код, можно воспользоваться плагинами, которые позволяют создавать и настраивать CPT через интерфейс:
- Custom Post Type UI — самый популярный и бесплатный плагин. Позволяет быстро создать CPT и таксономии.
- Pods — мощный инструмент с возможностью создавать не только CPT, но и настраиваемые поля и отношения между объектами.
- Toolset Types — платный плагин с широкими возможностями для построения сложных сайтов.
Эти плагины идеально подходят для новичков и тех, кто хочет быстро развернуть функциональные типы записей без программирования.
Как вывести пользовательские типы записей на сайте
Создав CPT, нужно уметь выводить записи на фронтенде. Для этого используется класс WP_Query. Рассмотрим пример вывода последних 5 отзывов:
$args = array(
'post_type' => 'reviews',
'posts_per_page' => 5
);
$reviews_query = new WP_Query($args);
if ($reviews_query->have_posts()) {
echo '<ul>';
while ($reviews_query->have_posts()) {
$reviews_query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo 'Отзывы не найдены.';
}Этот код можно вставить в шаблон темы или в шорткод для вывода отзывов в любом месте сайта.
Создание шорткода для вывода CPT
Чтобы упростить вывод, создадим шорткод [cyrtolat_reviews]:
function cyrtolat_reviews_shortcode() {
$args = array(
'post_type' => 'reviews',
'posts_per_page' => 5
);
$query = new WP_Query($args);
$output = '<ul>';
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
} else {
$output .= '<li>Отзывы не найдены.</li>';
}
$output .= '</ul>';
wp_reset_postdata();
return $output;
}
add_shortcode('cyrtolat_reviews', 'cyrtolat_reviews_shortcode');Расширение функционала: добавление пользовательских полей и таксономий
Для более сложных CPT часто нужны дополнительные поля — например, рейтинг в отзывах, дата события, цена товара и пр. Для этого можно использовать плагин Advanced Custom Fields (ACF) или регистрировать поля вручную.
Пример регистрации пользовательской таксономии «Категории отзывов» для CPT «Отзывы»:
function cyrtolat_register_taxonomy_review_category() {
$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_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'review-category')
);
register_taxonomy('review_category', array('reviews'), $args);
}
add_action('init', 'cyrtolat_register_taxonomy_review_category');Таксономии помогают структурировать записи и выводить их по категориям или тегам.
Советы и лучшие практики
При работе с CPT важно помнить:
- Используйте префиксы в названиях функций и шорткодов — это уменьшит риск конфликтов с другими плагинами и темами.
- Всегда регистрируйте CPT и таксономии на хук
initдля корректной работы. - Для сложных полей используйте ACF или аналогичные плагины, чтобы не писать много кода.
- Не забывайте про SEO: настраивайте ЧПУ, мета-теги и карту сайта отдельно для CPT.
- Тестируйте вывод и пагинацию, чтобы пользовательский контент отображался корректно на всех устройствах.
Создание и правильное использование пользовательских типов записей значительно расширит возможности вашего сайта на WordPress и позволит реализовывать самые разные проекты с удобной структурой контента.