В WordPress стандартно доступны типы записей «Записи» и «Страницы», но для многих проектов необходимы дополнительные типы записей (Custom Post Types), чтобы структурировать контент более удобно и логично. В этой статье подробно разберём, как создать собственный тип записи в WordPress с нуля, используя PHP-код, и рассмотрим примеры для практического использования.
Что такое собственный тип записи и зачем он нужен
Собственный тип записи — это отдельный вид контента в WordPress, который отличается от стандартных записей и страниц. Например, для сайта портфолио можно создать тип записи «Проекты», а для новостного сайта — тип «Новости». Это позволяет разделить разные виды контента, улучшить навигацию и удобство управления.
Основные преимущества использования собственных типов записей:
- Чёткое разделение контента по категориям.
- Возможность создавать отдельные шаблоны отображения.
- Улучшение SEO за счёт структурирования.
- Легкость интеграции с плагинами и кастомными таксономиями.
Как зарегистрировать собственный тип записи в WordPress
Для создания собственного типа записи используется функция register_post_type(), которую нужно вызвать в хуке init. Рассмотрим пример создания типа записи «Кейсы» для демонстрации реализованных проектов.
function wpstandart_register_post_type_cases() {
$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,
'has_archive' => true,
'menu_icon' => 'dashicons-portfolio',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'rewrite' => array('slug' => 'cases'),
'show_in_rest' => true // Для поддержки Gutenberg
);
register_post_type('wpstandart_cases', $args);
}
add_action('init', 'wpstandart_register_post_type_cases');
В этом примере создан тип записи wpstandart_cases с набором параметров и лейблов. Параметр show_in_rest нужен для поддержки редактора Gutenberg и API REST.
Добавление таксономий для собственного типа записи
Чтобы сделать тип записи более функциональным и удобным для фильтрации, стоит добавить кастомные таксономии — категории и теги, например, для «Кейсов» можно создать таксономию «Тип кейса».
function wpstandart_register_taxonomies() {
$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' => 'case-type'),
'show_in_rest' => true
);
register_taxonomy('wpstandart_case_type', array('wpstandart_cases'), $args);
}
add_action('init', 'wpstandart_register_taxonomies');
Теперь у типов записей появится удобная классификация с возможностью фильтрации в админке и на сайте.
Вывод собственного типа записи на фронтенде
После создания типа записи и таксономий необходимо вывести их на сайте. Для этого можно создать отдельный шаблон архива, например archive-wpstandart_cases.php в теме. Вот пример базового запроса для вывода всех кейсов:
<?php
$args = array(
'post_type' => 'wpstandart_cases',
'posts_per_page' => 10
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div><?php the_excerpt(); ?></div>
<?php endwhile; wp_reset_postdata();
else :
echo '<p>Кейсы не найдены.</p>';
endif;
?>
Такой код можно вставлять в шаблон или в кастомный шорткод для вывода списка кейсов на любой странице.
Плагины для расширения функционала собственных типов записей
Если хочется упростить работу с кастомными типами записей, стоит обратить внимание на плагины, которые позволяют создавать и настраивать их без кода:
- Custom Post Type UI — удобный интерфейс для создания CPT и таксономий.
- Advanced Custom Fields (ACF) — добавляет удобные поля для расширения данных типа записи.
- Pods — комплексное решение для кастомизации контента и пользовательских полей.
Например, после создания CPT «Кейсы» с помощью Custom Post Type UI можно добавить поля через ACF Pro и выводить их в шаблонах.
Советы и лучшие практики при работе с собственными типами записей
Чтобы разработка и поддержка собственного типа записи проходила гладко, стоит учитывать следующие моменты:
- Используйте префиксы в названиях функций и типов записи, чтобы избежать конфликтов (как
wpstandart_в примерах). - Добавляйте поддержку REST API (
show_in_rest = true) для совместимости с Gutenberg и внешними сервисами. - Создавайте шаблоны в теме для кастомного отображения (например,
single-wpstandart_cases.phpиarchive-wpstandart_cases.php). - Оптимизируйте запросы и кэшируйте результаты при большом объёме данных.
- Используйте возможность добавлять мета-поля и таксономии для расширения функционала.
Таким образом, создание собственного типа записи в WordPress — это мощный инструмент для структурирования сайта под любые задачи. Практические примеры кода помогут быстро внедрить эту функциональность и сделать проект более гибким и удобным.