В WordPress существует множество способов организовать контент, и один из самых эффективных — это создание собственного Post Type (тип записи). Пользовательские типы записей позволяют отделить различные типы контента от стандартных записей и страниц, что помогает структурировать сайт и управлять контентом более гибко.
Что такое Post Type и зачем он нужен в WordPress
По умолчанию WordPress использует несколько типов записей: post (записи), page (страницы), attachment (вложения) и несколько системных типов. Создание собственного Post Type позволяет определить новый тип контента, например, «Портфолио», «Отзывы», «События» и т.д. Это особенно полезно для сайтов с нестандартной структурой контента.
Преимущества пользовательских Post Type:
- Отдельная админ-панель и управление.
- Возможность использовать собственные таксономии и мета-поля.
- Улучшение SEO за счет правильной структуры URL и контента.
- Удобство для редакторов и администраторов сайта.
Рассмотрим, как создать собственный Post Type на примере сайта с доменом wpexperts.ru.
Регистрация собственного Post Type в functions.php
Для создания нового Post Type нужно использовать функцию register_post_type. Рекомендуется добавлять код в файл functions.php вашей дочерней темы или в плагин для кастомных функций. Вот пример создания Post Type «Отзывы».
function wpexperts_register_post_type_reviews() {
$labels = array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'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, // Включаем поддержку Gutenberg
'menu_position' => 5,
'menu_icon' => 'dashicons-admin-comments'
);
register_post_type('wpexperts_review', $args);
}
add_action('init', 'wpexperts_register_post_type_reviews');В этом коде мы определили новый тип записей с названием wpexperts_review. Обратите внимание на параметр show_in_rest, который необходим для поддержки редактора Gutenberg и REST API.
Создаем кастомные таксономии для собственного Post Type
Для удобной классификации записей нового типа полезно создать собственные таксономии — например, категории или теги, специально для «Отзывы».
Пример регистрации таксономии «Тип отзыва»:
function wpexperts_register_taxonomy_review_type() {
$labels = array(
'name' => 'Типы отзывов',
'singular_name' => 'Тип отзыва',
'search_items' => 'Поиск типов отзывов',
'all_items' => 'Все типы отзывов',
'edit_item' => 'Редактировать тип отзыва',
'add_new_item' => 'Добавить новый тип отзыва',
'menu_name' => 'Типы отзывов'
);
$args = array(
'hierarchical' => true, // как категории
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'review-type'),
'show_in_rest' => true
);
register_taxonomy('wpexperts_review_type', array('wpexperts_review'), $args);
}
add_action('init', 'wpexperts_register_taxonomy_review_type');Теперь в админке при редактировании отзывов появится новая таксономия «Типы отзывов». Благодаря этому можно гибко фильтровать и группировать отзывы по типам.
Вывод пользовательского Post Type на сайте
Чтобы вывести записи нового Post Type на сайте, можно создать отдельный шаблон архива archive-wpexperts_review.php в теме. Если шаблон не создан, WordPress попытается использовать archive.php или index.php.
Пример простого шаблона архива с выводом заголовков и ссылок на отзывы:
<?php get_header(); ?>
<div class="content-area">
<main class="site-main" role="main">
<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; ?>
</main>
</div>
<?php get_footer(); ?>Для более сложного вывода можно добавить мета-поля и использовать их в шаблонах.
Плагины для управления собственными Post Type и таксономиями
Если вы хотите создавать и управлять Post Type без кодирования, рекомендуем следующие плагины:
- Custom Post Type UI — позволяет создавать Post Type и таксономии через удобный интерфейс без написания кода.
- Advanced Custom Fields (ACF) — отличный плагин для добавления мета-полей к вашим типам записей.
- Pods — мощный инструмент для создания и управления кастомным контентом и связями между ним.
Использование плагинов удобно, если вы не хотите работать с кодом напрямую, но для оптимизации и кастомизации лучше использовать собственные функции.
Советы по оптимизации и безопасности пользовательских Post Type
При создании Post Type важно учесть несколько аспектов:
- Уникальный префикс — используйте префиксы (например,
wpexperts_) для всех функций и типов, чтобы избежать конфликтов с другими плагинами. - Регистрация на хук init — все Post Type и таксономии регистрируйте на событии
init. - Права доступа — контролируйте правами, кто может создавать, редактировать и удалять записи нового типа через параметры
capability_typeиcapabilities. - Оптимизация запросов — если вы используете WP_Query для выборки записей, обязательно оптимизируйте запросы с помощью параметров
posts_per_page,orderbyи кэширования.
Следуя этим рекомендациям, вы получите надежный и удобный инструмент для расширения функционала вашего сайта на WordPress.