Кастомные типы постов (Custom Post Types, CPT) — важный инструмент для расширения функционала WordPress. Они позволяют создавать различные виды контента, отличные от стандартных записей и страниц. Многие используют плагины для добавления CPT, но зачастую это лишняя нагрузка на систему. В этой статье я покажу, как создавать кастомные типы постов вручную, используя функции WordPress, а также расскажу о нюансах и особенностях их использования.
Что такое кастомные типы постов и зачем они нужны
Кастомные типы постов позволяют структурировать контент на сайте, создавая отдельные сущности с собственными параметрами и шаблонами. Например, если вы ведёте сайт с обзорами книг, имеет смысл создать тип поста book_review, чтобы отделить их от обычных записей блога.
Основные преимущества использования CPT:
- Удобная организация контента;
- Возможность создавать индивидуальные метаданные и таксономии;
- Гибкость в выводе и оформлении;
- Повышение удобства для пользователей и редакторов сайта.
Как зарегистрировать кастомный тип поста в WordPress вручную
Регистрация CPT производится с помощью функции register_post_type(). Обычно код добавляют в файл functions.php вашей темы или в отдельный плагин.
Пример регистрации типа поста wphost_book для обзоров книг:
function wphost_register_custom_post_type() {
$labels = [
'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 = [
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => ['slug' => 'book-reviews'],
'supports' => ['title', 'editor', 'thumbnail', 'custom-fields'],
'show_in_rest' => true, // для поддержки Gutenberg
'menu_position' => 5,
'menu_icon' => 'dashicons-book',
];
register_post_type('wphost_book', $args);
}
add_action('init', 'wphost_register_custom_post_type');После добавления этого кода в functions.php и обновления постоянных ссылок (Настройки > Постоянные ссылки > Сохранить изменения) в админке появится новый раздел «Обзоры книг».
Настройка таксономий для кастомного типа поста
Для полноты функционала часто нужно добавить собственные таксономии (например, жанры, авторы). Это можно сделать через функцию register_taxonomy().
Пример добавления таксономии «Жанр» к обзорам книг:
function wphost_register_custom_taxonomy() {
$labels = [
'name' => 'Жанры',
'singular_name' => 'Жанр',
'search_items' => 'Искать жанры',
'all_items' => 'Все жанры',
'edit_item' => 'Редактировать жанр',
'add_new_item' => 'Добавить новый жанр',
'new_item_name' => 'Название нового жанра',
'menu_name' => 'Жанры',
];
$args = [
'hierarchical' => true, // как категории
'labels' => $labels,
'show_ui' => true,
'show_in_rest' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => ['slug' => 'book-genre'],
];
register_taxonomy('wphost_book_genre', ['wphost_book'], $args);
}
add_action('init', 'wphost_register_custom_taxonomy');Теперь при добавлении или редактировании обзора книги вы сможете выбирать жанры, что улучшит навигацию и фильтрацию контента.
Вывод кастомных типов постов на сайте
Для вывода CPT в шаблонах можно использовать WP_Query. Например, чтобы вывести последние 5 обзоров книг с их заголовками и ссылками:
$args = [
'post_type' => 'wphost_book',
'posts_per_page' => 5,
];
$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 'Обзоры не найдены';
}Для более сложных выводов можно создавать кастомные шаблоны. Для CPT WordPress ищет файлы шаблонов по имени single-{post_type}.php для одиночной записи и archive-{post_type}.php для архива.
Пример создания файла шаблона single-wphost_book.php
Создайте в папке темы файл single-wphost_book.php и добавьте базовый код вывода:
<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="content"><?php the_content(); ?></div>
<?php endwhile; endif; ?>
<?php get_footer(); ?>Так вы получите гибкий и удобный вывод контента.
Советы по работе с кастомными типами постов
Несколько рекомендаций для стабильной работы CPT:
- Всегда используйте префиксы для функций и имён типов, чтобы избежать конфликтов (как в наших функциях с префиксом
wphost_). - Обязательно обновляйте постоянные ссылки после регистрации нового CPT.
- Используйте поддержку REST API (
'show_in_rest' => true) для совместимости с редактором Gutenberg и внешними интеграциями. - Не забывайте про роль доступа и права — можно ограничить доступ к новым типам постов для разных групп пользователей.
Заключение
Создание кастомных типов постов вручную — эффективный способ расширить функционал WordPress без лишних плагинов. Такой подход ускоряет сайт, снижает вероятность конфликтов и даёт полный контроль над структурой контента. Используя описанные методы, вы сможете создавать удобные и уникальные решения для своих проектов.
Для автоматизации и дополнительной оптимизации можно попробовать плагины с сайта WPSHOP, например, Clearfy Pro для оптимизации или Expert Review для отзывов, которые отлично интегрируются с CPT.