В WordPress стандартно доступны типы записей «посты» и «страницы», но часто для сложных проектов необходимы собственные типы записей (Custom Post Types, CPT). В этой статье подробно разберём, как создать собственный тип записи, настроить его отображение и использовать в теме или плагине. Все примеры будут максимально практичными и понятными.
Что такое собственный тип записи и зачем он нужен
Собственный тип записи позволяет расширить функциональность WordPress, добавляя новые сущности с собственными полями и поведением. Например, для сайта с каталогом фильмов можно создать тип записи «Фильм», где будут отдельные поля для режиссёра, года выпуска, жанра и т.д. Это намного удобнее, чем пытаться хранить всё в стандартных постах.
Использование собственных типов записи повышает удобство управления контентом и упрощает разработку. Это особенно важно для крупных проектов с нестандартной структурой данных.
Для создания CPT используется функция register_post_type(), которую следует вызывать на хуке init.
Как зарегистрировать собственный тип записи: базовый пример
Добавим в файл functions.php вашей темы или в собственный плагин следующий код:
add_action('init', 'wpone_register_movie_post_type');
function wpone_register_movie_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' => 'movies'],
'supports' => ['title', 'editor', 'thumbnail', 'custom-fields'],
'show_in_rest' => true
];
register_post_type('wpone_movie', $args);
}В результате в админке появится новый раздел «Фильмы» с привычным функционалом. Аргумент show_in_rest включает поддержку REST API, что важно для современных приложений и редакторов.
Добавление метаполей к собственному типу записи
Чтобы расширить тип записи дополнительными полями (например, год выпуска, режиссёр), создадим метабоксы. Для этого используем хуки add_meta_boxes и save_post.
Пример добавления метабокса для года выпуска:
add_action('add_meta_boxes', 'wpone_add_movie_metabox');
function wpone_add_movie_metabox() {
add_meta_box('wpone_movie_year', 'Год выпуска', 'wpone_movie_year_metabox_callback', 'wpone_movie', 'side');
}
function wpone_movie_year_metabox_callback($post) {
wp_nonce_field('wpone_save_movie_year', 'wpone_movie_year_nonce');
$value = get_post_meta($post->ID, '_wpone_movie_year', true);
echo '<input type="number" name="wpone_movie_year" value="' . esc_attr($value) . '" style="width: 100%;" min="1900" max="2100" />';
}
add_action('save_post', 'wpone_save_movie_year');
function wpone_save_movie_year($post_id) {
if (!isset($_POST['wpone_movie_year_nonce']) || !wp_verify_nonce($_POST['wpone_movie_year_nonce'], 'wpone_save_movie_year')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['wpone_movie_year'])) {
update_post_meta($post_id, '_wpone_movie_year', intval($_POST['wpone_movie_year']));
}
}С помощью этого кода вы добавите поле для года выпуска в боковую панель при редактировании записи типа «Фильм».
Вывод собственных типов записей на фронтенде
Для отображения новых типов записей на сайте можно создать отдельный шаблон архивной страницы и шаблон одиночной записи:
archive-wpone_movie.php— архив всех фильмовsingle-wpone_movie.php— страница одного фильма
Пример простого цикла в архиве:
<?php if (have_posts()) : ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> (Год: <?php echo esc_html(get_post_meta(get_the_ID(), '_wpone_movie_year', true)); ?>)</li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p>Фильмы не найдены.</p>
<?php endif; ?>Так вы сможете вывести список фильмов с их годом выпуска.
Использование плагинов для работы с собственными типами записей
Если хочется упростить процесс создания CPT и метаполей, можно воспользоваться плагинами. Например:
- Clearfy Pro — позволяет оптимизировать сайт и управлять CPT
- WPRemark — система отзывов, использующая CPT
Однако знание создания CPT вручную полезно для гибкой настройки и отладки.
Советы и лучшие практики при создании CPT
1. Используйте префиксы в названиях функций и слагов, чтобы избежать конфликтов (как в примерах с префиксом wpone_).
2. Включайте поддержку REST API (show_in_rest => true) для совместимости с Gutenberg и внешними приложениями.
3. Правильно настраивайте права доступа и отображение в меню.
4. Используйте кодировку и функции WordPress для безопасности и совместимости.
Создание собственных типов записей — мощный инструмент для расширения WordPress под конкретные задачи. Следуя этим рекомендациям и используя примеры, вы быстро освоите разработку и сможете создавать сложные проекты с удобным управлением контентом.