Что такое собственный тип постов и зачем он нужен
В WordPress стандартно есть несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и несколько других. Однако часто возникает необходимость добавить уникальный тип контента, который будет отличаться по структуре и логике от стандартных. Например, это могут быть товары, портфолио, отзывы, события и т.д. Для этого используются собственные типы постов (Custom Post Types, CPT).
Создание CPT позволяет лучше организовать контент на сайте, улучшить навигацию и управление, а также расширить функциональность без необходимости создавать отдельные плагины или базы данных.
В этой статье подробно рассмотрим, как создать собственный тип постов в WordPress с помощью кода и разберём основные параметры.
Регистрация собственного типа постов: базовый пример
Для регистрации собственного типа постов нужно использовать функцию register_post_type(). Обычно её вызывают в хуке init. Например, создадим тип поста wpmarketing_portfolio для демонстрации проектов:
function wpmarketing_register_custom_post_type() {
$labels = array(
'name' => 'Портфолио',
'singular_name' => 'Проект',
'menu_name' => 'Портфолио',
'name_admin_bar' => 'Проект',
'add_new' => 'Добавить новый',
'add_new_item' => 'Добавить новый проект',
'new_item' => 'Новый проект',
'edit_item' => 'Редактировать проект',
'view_item' => 'Просмотреть проект',
'all_items' => 'Все проекты',
'search_items' => 'Поиск проектов',
'parent_item_colon' => 'Родительские проекты:',
'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' => 'portfolio'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments')
);
register_post_type('wpmarketing_portfolio', $args);
}
add_action('init', 'wpmarketing_register_custom_post_type');Этот код добавит в админ-панель новый пункт меню "Портфолио" с возможностью создавать, редактировать, удалять и просматривать проекты.
Разбор параметров
- labels — массив с переводами и названиями для разных элементов интерфейса.
- public — делает тип доступным на фронтенде.
- rewrite — задаёт человеко-понятный URL для типа (например, site.ru/portfolio/project-name).
- supports — набор поддерживаемых возможностей (заголовок, редактор, миниатюры и т.д.).
- has_archive — позволяет иметь архивную страницу с перечнем всех записей типа.
Добавление таксономий к собственному типу постов
Для удобной фильтрации и группировки лучше добавить таксономии. Например, к портфолио можно добавить категорию или теги. Для этого используем функцию register_taxonomy(). Пример регистрации категории 'portfolio_category':
function wpmarketing_register_taxonomy() {
$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' => 'portfolio-category')
);
register_taxonomy('portfolio_category', array('wpmarketing_portfolio'), $args);
}
add_action('init', 'wpmarketing_register_taxonomy');Теперь у каждого проекта можно ставить категорию, что упростит создание фильтров и списков.
Вывод записей собственного типа постов в шаблоне
Чтобы вывести созданные записи на сайте, можно сделать отдельный файл шаблона archive-wpmarketing_portfolio.php или использовать WP_Query. Пример простого вывода в любом шаблоне:
$args = array(
'post_type' => 'wpmarketing_portfolio',
'posts_per_page' => 10
);
$portfolio_query = new WP_Query($args);
if ($portfolio_query->have_posts()) {
echo '<ul>';
while ($portfolio_query->have_posts()) {
$portfolio_query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
} else {
echo 'Проекты не найдены.';
}
wp_reset_postdata();Такой код позволяет гибко выводить портфолио там, где нужно.
Полезные плагины для работы с собственными типами постов
Хотя регистрация CPT вручную полезна для понимания и точной настройки, есть удобные плагины, которые упрощают создание и управление типами постов без кода:
- Custom Post Type UI — позволяет через интерфейс создавать CPT и таксономии.
- Pods — расширенный плагин для создания CPT, таксономий и пользовательских полей.
- Toolset Types — платный инструмент с мощными возможностями для сложных сайтов.
Если вы хотите добавить кастомные поля к CPT, рекомендую использовать Advanced Custom Fields (ACF) — он отлично сочетается с любыми типами постов.
Советы по SEO и производительности для собственных типов постов
При создании CPT важно учитывать SEO-настройки. Убедитесь, что у вас правильно настроены человеко-читаемые URL (rewrite) и что тип поста доступен для индексации (параметр publicly_queryable). Для управления SEO можно использовать плагины типа Yoast SEO или Rank Math, они поддерживают кастомные типы постов.
Также не перегружайте CPT большим количеством метаданных и таксономий, чтобы не замедлять загрузку страниц и запросы к базе данных.