Кастомные типы записей (Custom Post Types) в WordPress позволяют расширить стандартную функциональность CMS, добавляя новые типы контента, отличные от обычных записей и страниц. Это удобно для сайтов с уникальной структурой данных, например, портфолио, отзывы, товары, события и многое другое.
Что такое кастомные типы записей и зачем они нужны
По умолчанию WordPress поддерживает два основных типа контента: записи (posts) и страницы (pages). Однако эти типы не всегда подходят для всех задач. Кастомные типы записей позволяют создавать новые объекты контента, которые могут иметь собственные поля, таксономии и поведение. Это помогает сделать сайт более структурированным и удобным для пользователей.
Например, если вы создаёте сайт с обзорами книг, то логично создать отдельный тип записи book_review>, чтобы отделить обзоры от обычных записей блога.
Как зарегистрировать кастомный тип записи в WordPress
Для добавления нового типа записи используется функция register_post_type(). Обычно её вызывают в хуке init. Рассмотрим пример регистрации типа записи «Отзывы» с слагом review.
function wp0_register_custom_post_type_review() {
$labels = array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'all_items' => 'Все отзывы',
'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('review', $args);
}
add_action('init', 'wp0_register_custom_post_type_review');После добавления этого кода в файл functions.php вашей темы или в отдельный плагин, в админке появится новый пункт меню «Отзывы» с возможностью добавлять, редактировать и удалять записи этого типа.
Добавление кастомных таксономий к типу записи
Чтобы упорядочить кастомные записи, часто используют собственные таксономии (например, категории и теги). Для этого применяется функция register_taxonomy(). Рассмотрим пример создания таксономии «Жанры» для отзывов.
function wp0_register_taxonomy_review_genre() {
$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-genre'),
'show_in_rest' => true
);
register_taxonomy('review_genre', array('review'), $args);
}
add_action('init', 'wp0_register_taxonomy_review_genre');Теперь при создании отзыва можно будет выбрать жанр или добавить новый. Это значительно облегчает навигацию и фильтрацию по типу записи.
Использование кастомных типов записей в шаблонах темы
Чтобы выводить кастомные записи на сайте, нужно создать соответствующие шаблоны. WordPress автоматически ищет шаблон по имени single-{post_type}.php для одиночной записи и archive-{post_type}.php для архива.
Например, создадим файл single-review.php в папке темы:
<?php get_header(); ?>
<?php
if (have_posts()) :
while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="review-content"><?php the_content(); ?></div>
<p>Автор: <?php the_author(); ?></p>
<?php endwhile;
endif;
?>
<?php get_footer(); ?>Для архива отзывов создайте archive-review.php и используйте стандартный цикл WordPress, чтобы вывести список всех отзывов с пагинацией.
Пример расширения функционала с помощью плагина
Если вы не хотите писать код вручную, можно использовать плагин Custom Post Type UI. Он позволяет создавать кастомные типы записей и таксономии через удобный интерфейс. Однако ручное создание даёт больше контроля и позволяет настроить все параметры под свои нужды.
Для дополнительной оптимизации и настройки можно использовать плагин Clearfy Pro, который помогает отключать лишние функции и управлять производительностью WordPress.
Советы по работе с кастомными типами записей
- Используйте префиксы в именах функций и слагов — это поможет избежать конфликтов с другими плагинами и темами. В нашем примере префикс
wp0_. - Не забывайте о поддержке REST API, если планируете использовать API для взаимодействия с сайтом или создавать фронтенд на JS-фреймворках.
- Добавляйте мета-поля и кастомные поля, чтобы расширить функциональность ваших типов записей. Для этого можно использовать плагины Advanced Custom Fields или писать собственные решения.
- Оптимизируйте запросы WP_Query при выводе кастомных записей, особенно если их много. Используйте кэширование и лимитируйте выборку.
Пример WP_Query для вывода отзывов по жанру
$args = array(
'post_type' => 'review',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'review_genre',
'field' => 'slug',
'terms' => 'fantasy',
),
),
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
the_excerpt();
}
wp_reset_postdata();
} else {
echo 'Отзывов в жанре "Фэнтези" не найдено.';
}
Этот код можно поместить в шаблон или в шорткод, чтобы вывести отзывы только определённого жанра.
Заключение
Кастомные типы записей — мощный инструмент для создания сложных и структурированных сайтов на WordPress. Они позволяют организовать контент по своим правилам и сделать сайт удобным для админов и пользователей. Ручное создание с помощью register_post_type() и register_taxonomy() даёт максимум гибкости и контроля. Не забывайте использовать префиксы и оптимизировать запросы для лучшей производительности.