В WordPress по умолчанию есть стандартные типы записей — посты и страницы, а также категории и метки. Но часто стандартных возможностей недостаточно, особенно если вы хотите вывести контент нестандартным образом или сделать сложную структуру категорий. В этом случае на помощь приходят кастомные типы записей (Custom Post Types, CPT) и кастомные таксономии (Custom Taxonomies).
Что такое Custom Post Types и зачем они нужны
Кастомные типы записей — это способ расширить стандартный функционал WordPress, добавив новые типы контента, которые можно структурировать и выводить отдельно от обычных постов. Например, у вас может быть сайт с курсами, где курсы — это отдельный тип записи, а не просто посты блога.
Использование CPT позволяет:
- Разделять контент по смыслу и назначению;
- Настраивать индивидуальные шаблоны для отображения;
- Управлять записями отдельно от стандартных постов;
- Использовать кастомные таксономии для классификации.
Кастомные таксономии для гибкой категоризации
Таксономии — это способ группировки записей. В WordPress есть две стандартные таксономии: категории и метки. Но с CPT часто нужны новые, более точные таксономии, например, для курсов это может быть уровень сложности, тип курса или тематика.
Создавая свои таксономии, вы получаете:
- Удобную фильтрацию контента;
- Возможность создавать вложенные категории или иерархии;
- Улучшенную навигацию для пользователей;
- Гибкие настройки отображения.
Пример создания Custom Post Type и таксономии через код
Рассмотрим, как в вашем functions.php темы добавить кастомный тип записи "Курсы" и таксономию "Тематика".
function wpcourse_register_post_type_and_taxonomy() {
// Регистрируем CPT Courses
$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' => 'courses'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true,
);
register_post_type('wpcourse_course', $args);
// Регистрируем таксономию Тематика для CPT Courses
$taxonomy_labels = array(
'name' => 'Тематики',
'singular_name' => 'Тематика',
'search_items' => 'Искать тематики',
'all_items' => 'Все тематики',
'edit_item' => 'Редактировать тематику',
'update_item' => 'Обновить тематику',
'add_new_item' => 'Добавить новую тематику',
'new_item_name' => 'Новое имя тематики',
'menu_name' => 'Тематики'
);
$taxonomy_args = array(
'labels' => $taxonomy_labels,
'hierarchical' => true,
'show_ui' => true,
'show_admin_column' => true,
'rewrite' => array('slug' => 'course-topic'),
'show_in_rest' => true,
);
register_taxonomy('wpcourse_topic', 'wpcourse_course', $taxonomy_args);
}
add_action('init', 'wpcourse_register_post_type_and_taxonomy');Этот код создаёт новый тип записи wpcourse_course и таксономию wpcourse_topic для удобной категоризации курсов.
Вывод кастомных типов записей и таксономий в шаблонах
Чтобы вывести список курсов с их тематикой, используйте WP_Query с параметрами по CPT и таксономии. Пример шаблона, который выводит курсы с тематиками:
$args = array(
'post_type' => 'wpcourse_course',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'wpcourse_topic',
'field' => 'slug',
'terms' => 'frontend'
),
),
);
$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 'Курсы не найдены';
}
Такой вывод позволит фильтровать курсы по выбранной тематике, например по slug «frontend».
Рекомендации по плагинам для работы с CPT и таксономиями
Если вы предпочитаете не писать код, есть несколько удобных плагинов для создания кастомных типов записей и таксономий:
- Custom Post Type UI — простой графический интерфейс для регистрации CPT и таксономий.
- Toolset Types — мощный плагин для создания и управления типами записей, полями и таксономиями.
- Clearfy Pro — оптимизирует работу сайта и может помочь с управлением CPT и таксономиями.
Лучшие практики работы с кастомными типами записей и таксономиями
При работе с CPT и таксономиями важно следовать нескольким правилам:
- Используйте уникальные префиксы в названиях функций и идентификаторов, чтобы избежать конфликтов с другими плагинами или темами.
- Регистрация CPT и таксономий должна происходить на хуке
init, чтобы WordPress корректно их распознал. - Обязательно включайте поддержку REST API (
'show_in_rest' => true), если планируете работать с Gutenberg или создавать SPA на базе WordPress. - Разрабатывайте удобные шаблоны для отображения CPT, учитывая пользовательский опыт и SEO.
Использование кастомных типов записей и таксономий — мощный инструмент для создания сложных и структурированных сайтов на WordPress. Благодаря им можно легко разделять контент, улучшать навигацию и создавать уникальные пользовательские интерфейсы без излишнего нагромождения стандартных функций.