В WordPress по умолчанию доступны стандартные типы контента — записи (posts) и страницы (pages). Однако для реализации сложных проектов часто требуется создавать собственные типы постов (Custom Post Types, CPT). Это позволяет структурировать контент, создавать отдельные разделы сайта и расширять функционал.
Что такое собственные типы постов и для чего они нужны
Собственные типы постов — это пользовательские сущности контента, которые можно зарегистрировать в WordPress. Они работают аналогично записям и страницам, но позволяют хранить и отображать контент с уникальной логикой и интерфейсом.
Например, если вы создаёте сайт с каталогом книг, то можно завести тип поста book>. Для сайта с мероприятиями — event>. Это упрощает работу с контентом и позволяет сделать админку удобнее для конечных пользователей.
Кроме того, собственные типы постов позволяют:
- Использовать отдельные шаблоны для отображения;
- Настраивать метаданные и таксономии, специфичные для типа поста;
- Применять разные права доступа и фильтры;
- Упрощать поиск и сортировку контента.
Как зарегистрировать собственный тип поста в WordPress
Для регистрации CPT используется функция register_post_type(), которую следует вызвать на хук init. Рассмотрим пример регистрации типа поста book с параметрами, которые сделают его удобным в админке и на сайте.
function wpeasy_register_post_type_book() {
$labels = array(
'name' => 'Книги',
'singular_name' => 'Книга',
'menu_name' => 'Книги',
'name_admin_bar' => 'Книга',
'add_new' => 'Добавить книгу',
'add_new_item' => 'Добавить новую книгу',
'edit_item' => 'Редактировать книгу',
'new_item' => 'Новая книга',
'view_item' => 'Посмотреть книгу',
'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' => 'book'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'menu_icon' => 'dashicons-book',
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
);
register_post_type('book', $args);
}
add_action('init', 'wpeasy_register_post_type_book');Данный код создаст в админке отдельное меню «Книги» с возможностью добавления, редактирования и удаления записей данного типа. Опция supports указывает, какие стандартные возможности WordPress будут доступны у типа поста — заголовок, редактор, миниатюра и т.д.
Описание ключевых параметров
labels — массив с названиями для интерфейса (админка, меню, подсказки).
public — делает тип поста доступным на сайте и в админке.
rewrite — управляет ЧПУ (человеко-понятными URL).
has_archive — создаёт архивную страницу с перечислением всех записей.
menu_icon — иконка в меню админки из набора dashicons.
Добавление пользовательских таксономий к типу поста
Чтобы структурировать контент, часто используют таксономии — категории и метки. Для собственных типов постов можно регистрировать свои таксономии или использовать стандартные.
Пример: создадим таксономию «Жанры» для типа поста book.
function wpeasy_register_taxonomy_genre() {
$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('genre', array('book'), $args);
}
add_action('init', 'wpeasy_register_taxonomy_genre');Теперь в карточках книг можно будет назначать жанры, что позволит фильтровать и выводить книги по этим жанрам.
Вывод собственных типов постов на сайте
Для вывода CPT на фронтенде WordPress можно создать специальный шаблон архива и шаблон отдельной записи.
Архив для типа book создаётся в файле archive-book.php. В этом файле можно использовать стандартный Loop WordPress.
<?php get_header(); ?>
<h1>Каталог книг</h1>
<?php if ( have_posts() ) : ?>
<ul>
<?php while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p>Книги не найдены.</p>
<?php endif; ?>
<?php get_footer(); ?>Для отдельной записи создайте файл single-book.php, где вы сможете вывести все данные книги, включая произвольные поля и таксономии.
Пример вывода произвольного поля
Если для книги вы добавили произвольное поле, например isbn, то в шаблоне можно вывести его так:
$isbn = get_post_meta(get_the_ID(), 'isbn', true);
echo '<p>ISBN: ' . esc_html($isbn) . '</p>';Рекомендации и полезные плагины для работы с CPT
Для удобства регистрации и управления собственными типами постов можно использовать плагины, которые помогут без ошибок создавать CPT и таксономии.
- Custom Post Type UI — популярный плагин с удобным интерфейсом для создания CPT и таксономий без кода.
- Advanced Custom Fields (ACF) — позволяет добавлять произвольные поля к CPT и удобно выводить их в шаблонах.
Если хотите интегрировать CPT с SEO-плагинами, убедитесь, что они поддерживают ваш тип постов. Например, в Clearfy Pro из wpshop.ru есть опции для оптимизации CPT.
Заключение по теме создания и использования собственных типов постов
Создание собственных типов постов — мощный инструмент для расширения возможностей WordPress. Это улучшает структуру сайта, упрощает управление контентом и позволяет создавать уникальные проекты любой сложности.
Главное — грамотно регистрировать CPT и таксономии, настраивать шаблоны для их вывода и использовать дополнительные плагины для управления и расширения функционала. Приведённые примеры кода помогут быстро начать работу и избежать типичных ошибок.