В стандартной установке WordPress есть несколько типов контента: записи, страницы, вложения и т.д. Но часто возникает необходимость добавить свои собственные типы постов — например, портфолио, отзывы, товары или события. Это позволяет структурировать информацию и создавать удобный интерфейс для пользователей и администраторов сайта.
Что такое собственные типы постов в WordPress и зачем они нужны
Собственные типы постов (Custom Post Types, CPT) — это механизм WordPress, позволяющий создавать новые виды контента, отличные от стандартных записей и страниц. Они позволяют расширить функциональность сайта, сделать его более гибким и адаптированным под задачи бизнеса.
Например, если вы ведёте сайт агентства, можно создать тип поста «Кейсы» с отдельным набором полей и шаблоном вывода. Это упрощает управление контентом и улучшает пользовательский опыт.
Кроме того, CPT хорошо интегрируются с таксономиями (категориями и метками), мета-полями и плагинами, расширяющими возможности админки.
Метод 1: Регистрация собственного типа поста через functions.php
Самый простой способ создать CPT — зарегистрировать его в файле functions.php вашей темы или в файле плагина. Это делается с помощью функции register_post_type.
Рассмотрим пример создания типа поста portfolio для демонстрации проектов.
function wppartner_register_custom_post_type() {
$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,
'rewrite' => array('slug' => 'portfolio'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
'show_in_rest' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-portfolio',
);
register_post_type('portfolio', $args);
}
add_action('init', 'wppartner_register_custom_post_type');Обратите внимание на параметр supports, он определяет, какие блоки редактора и метаданные будут доступны для этого типа поста.
Опция show_in_rest включает поддержку Gutenberg и REST API, что важно для современных сайтов.
Как проверить, что CPT работает
После добавления кода зайдите в админку WordPress — в меню появится раздел «Портфолио». Там можно создавать новые проекты, редактировать и просматривать их на сайте по адресу site.ru/portfolio.
Если пермалинки не работают, перейдите в «Настройки» → «Постоянные ссылки» и просто сохраните настройки заново — это обновит правила перезаписи.
Метод 2: Использование плагинов для создания Custom Post Types
Если вы не хотите писать код вручную, можно воспользоваться популярными плагинами, которые позволяют создавать CPT через удобный интерфейс.
- Custom Post Type UI — один из самых популярных и простых плагинов. Позволяет создавать и настраивать типы постов и таксономии без кода.
- Pods — мощный плагин для создания не только CPT, но и пользовательских полей и связей между контентом.
- Toolset Types — платный плагин с расширенными возможностями для создания контентных типов и шаблонов.
Рассмотрим пример создания CPT с помощью Custom Post Type UI:
- Установите и активируйте плагин через админку WordPress.
- Перейдите в меню «CPT UI» → «Добавить/Редактировать типы постов».
- Укажите слаг (например,
portfolio) и название (Портфолио). - Настройте остальные параметры — поддержка редактора, миниатюр, архива и т.д.
- Сохраните изменения и проверьте появление нового раздела в админке.
Плагин автоматически зарегистрирует CPT, и вы сможете сразу использовать его.
Как добавить мета-поля к собственным типам постов
Часто требуется добавить дополнительные поля для хранения информации, например, URL проекта, дату или рейтинг. Для этого можно использовать плагин Advanced Custom Fields (ACF) или написать код вручную.
Пример добавления мета-поля с помощью ACF:
- Установите и активируйте ACF.
- Создайте новую группу полей, выберите тип поста «Портфолио».
- Добавьте нужные поля — текстовые, даты, изображения и т.д.
- Сохраните и при создании проекта в админке появятся новые поля.
Для вывода этих данных в шаблонах используйте функцию get_field:
<?php
$url = get_field('project_url');
if ($url) {
echo '<a href="' . esc_url($url) . '" target="_blank">Сайт проекта</a>';
}
?>Как вывести собственный тип поста в шаблонах темы
Чтобы выводить контент CPT на сайте, нужно создать шаблон архива и отдельного элемента.
Например, создайте файл archive-portfolio.php в папке темы. Внутри используйте стандартный цикл 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-portfolio.php и выведите нужные поля и контент.
Полезные советы и рекомендации по работе с CPT
- Всегда используйте уникальный префикс для функций и слагов, например,
wppartner_, чтобы избежать конфликтов. - Не регистрируйте CPT в
functions.phpтемы, если планируете менять тему — лучше оформить это в отдельном плагине. - Поддерживайте совместимость с REST API, чтобы использовать редактор Gutenberg и сторонние приложения.
- Используйте таксономии (категории и метки) для удобной фильтрации и сортировки контента.
- Тестируйте работу CPT на локальном сервере перед публикацией на живом сайте.