Что такое пользовательские типы записей в WordPress и зачем они нужны
WordPress изначально предоставляет несколько стандартных типов записей: записи (posts), страницы (pages), вложения (attachments) и другие. Однако для многих проектов стандартных типов недостаточно — например, если вы создаёте сайт с каталогом товаров, портфолио, отзывами или мероприятиями. В таких случаях на помощь приходят пользовательские типы записей (Custom Post Types, CPT), которые позволяют создавать собственные сущности с уникальной структурой и поведением.
Пользовательские типы записей позволяют организовать контент более удобно и гибко, улучшить управление сайтом и интерфейс админки, а также расширить возможности тем и плагинов. Важно понимать, что CPT — это полноценные типы контента, которые работают в WordPress как стандартные записи, но с дополнительными настройками и метаданными.
WPGen рекомендует освоить создание и настройку CPT, чтобы максимально адаптировать WordPress под свои задачи и создавать уникальные проекты.
Создание пользовательского типа записей с помощью кода
Регистрация CPT в functions.php
Самый распространённый и гибкий способ создания пользовательского типа записей — добавить функцию регистрации в файл functions.php вашей темы или в отдельный плагин. Рассмотрим пример создания типа записей «Книги» (books):
function wpgen_register_cpt_books() {
$labels = array(
'name' => 'Книги',
'singular_name' => 'Книга',
'menu_name' => 'Книги',
'name_admin_bar' => 'Книга',
'add_new' => 'Добавить новую',
'add_new_item' => 'Добавить новую книгу',
'edit_item' => 'Редактировать книгу',
'new_item' => 'Новая книга',
'view_item' => 'Просмотр книги',
'all_items' => 'Все книги',
'search_items' => 'Поиск книг',
'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' => 'books'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
);
register_post_type('wpgen_books', $args);
}
add_action('init', 'wpgen_register_cpt_books');В этом примере мы создаём CPT с идентификатором wpgen_books, указывая метки для интерфейса и ключевые параметры. Параметр 'supports' определяет, какие стандартные функции будут доступны для типа записи (например, редактор контента, миниатюры, комментарии).
Обратите внимание, что префикс wpgen_ добавлен для избежания конфликтов с другими типами.
Регистрация таксономий для CPT
Для удобной категоризации ваших записей полезно добавить пользовательские таксономии. Например, для книг можно создать таксономию «Жанры».
function wpgen_register_taxonomy_genres() {
$labels = array(
'name' => 'Жанры',
'singular_name' => 'Жанр',
'search_items' => 'Поиск жанров',
'all_items' => 'Все жанры',
'parent_item' => 'Родительский жанр',
'parent_item_colon' => 'Родительский жанр:',
'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' => 'genre'),
);
register_taxonomy('wpgen_genre', array('wpgen_books'), $args);
}
add_action('init', 'wpgen_register_taxonomy_genres');Теперь в админке при редактировании книги можно выбрать один или несколько жанров. Таксономии помогают структурировать контент и улучшить навигацию.
Использование плагинов для создания CPT: обзор и рекомендации
Если вы не хотите прописывать код вручную, можно использовать плагины, которые упрощают процесс создания пользовательских типов записей и таксономий.
Advanced Custom Fields (ACF)
Хотя ACF напрямую не создаёт CPT, он отлично дополняет их, позволяя создавать удобные метаполя для ваших типов записей. Использование ACF вместе с CPT позволяет создавать мощные кастомные интерфейсы для редактирования.
Custom Post Type UI (CPT UI)
Этот плагин — один из самых популярных для создания и управления пользовательскими типами записей и таксономиями без кода. Интерфейс удобен и интуитивен: вы задаёте все параметры через админку, а плагин регистрирует CPT автоматически.
Недостаток — при удалении плагина все CPT перестают работать, так как регистрация происходит динамически.
WPGen советует комбинировать CPT UI с ACF для получения максимального контроля и удобства.
Вывод пользовательских типов записей на сайте: примеры кода
После создания CPT важно правильно вывести записи на сайте. Рассмотрим несколько примеров.
Вывод списка последних записей CPT
$args = array(
'post_type' => 'wpgen_books',
'posts_per_page' => 10,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo 'Записей не найдено.';
}Этот код выводит список из 10 последних книг с ссылками на отдельные страницы.
Вывод записей CPT с таксономией
Чтобы вывести книги определённого жанра, можно использовать так:
$args = array(
'post_type' => 'wpgen_books',
'tax_query' => array(
array(
'taxonomy' => 'wpgen_genre',
'field' => 'slug',
'terms' => 'fantasy',
),
),
);
$query = new WP_Query($args);
// Вывод аналогичен предыдущему примеруСоветы по совместимости и производительности при использовании CPT
При внедрении пользовательских типов записей важно учитывать совместимость с темами и плагинами. Следите, чтобы идентификаторы CPT были уникальными и не конфликтовали с уже существующими. Используйте префиксы (как wpgen_) для защиты.
Также рекомендуем использовать WP_Query с правильными параметрами для оптимизации запросов и не перегружать базу данных излишними запросами. Кеширование результатов поможет ускорить работу сайта.
WPGen советует тестировать CPT на реальных данных и внимательно настраивать права доступа через параметры capability_type и роли пользователей.
Заключение
Создание пользовательских типов записей — это мощный инструмент для расширения функционала WordPress. Используя код или плагины, вы можете адаптировать сайт под любые задачи: от каталога товаров до портфолио и новостных разделов. Главное — внимательно подходить к структуре, настройкам и оптимизации.