Если вы хотите расширить функциональность своего сайта на WordPress, создание собственного типа записей (Custom Post Type, CPT) — это один из самых эффективных способов. С помощью CPT можно структурировать контент, разделить записи по типам и сделать сайт удобнее для пользователей и администраторов.
Что такое Custom Post Type и зачем он нужен
По умолчанию WordPress предлагает несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и другие, но часто этого недостаточно. Например, если вы создаёте сайт с каталогом книг, событиями или портфолио, лучше создать отдельный тип записей для каждой категории.
Custom Post Type позволяет:
- Логично структурировать контент по типам.
- Отделить контент для удобства администрирования.
- Улучшить SEO за счет отдельного URL и шаблонов.
- Использовать кастомные таксономии и метаполя.
Создание Custom Post Type через код: пример для wpkpi.ru
Для создания CPT нужно использовать функцию register_post_type(). Рекомендуется добавлять регистрацию в файл темы functions.php или в отдельный плагин. Ниже пример функции с префиксом wpkpi_:
function wpkpi_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' => 'project'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
'show_in_rest' => true // Для поддержки Gutenberg
);
register_post_type('wpkpi_project', $args);
}
add_action('init', 'wpkpi_register_custom_post_type');
В этом примере создаётся тип записей «Проекты» с URL site.ru/project/название-проекта. Поддерживаются заголовок, редактор, миниатюра, отрывок и пользовательские поля.
Настройка таксономий для Custom Post Type
Для удобной категоризации проектов можно добавить свои таксономии — категории и метки. Вот как создать таксономию «Тип проекта» для CPT:
function wpkpi_register_project_taxonomies() {
$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' => 'project-type'),
'show_in_rest' => true
);
register_taxonomy('wpkpi_project_type', array('wpkpi_project'), $args);
}
add_action('init', 'wpkpi_register_project_taxonomies');
Таксономии помогут фильтровать проекты по типам в админке и на сайте.
Вывод Custom Post Type на сайте: примеры WP_Query и шаблонов
Чтобы вывести созданные проекты на сайте, используйте WP_Query:
$args = array(
'post_type' => 'wpkpi_project',
'posts_per_page' => 10,
'orderby' => 'date',
'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo 'Проекты не найдены';
}
Для отдельного CPT рекомендуют создавать шаблоны в теме: single-wpkpi_project.php, archive-wpkpi_project.php, чтобы задать уникальный дизайн.
Использование плагинов для создания Custom Post Type
Если не хотите писать код, можно использовать плагины. Среди популярных:
- Custom Post Type UI — удобный интерфейс для создания CPT и таксономий.
- Toolset Types — расширенный функционал для типов записей и полей.
Но если нужно кастомное решение, лучше создавать CPT через код, чтобы избежать лишних зависимостей и быстрее адаптировать под задачи.
Рекомендации по работе с Custom Post Type
При работе с CPT важно:
- Использовать уникальные префиксы в именах функций и типов, например
wpkpi_, чтобы избежать конфликтов. - Не забывать про поддержку REST API (
'show_in_rest' => true), если используете блоковый редактор Gutenberg или планируете AJAX-интеграции. - Настраивать права доступа при необходимости — можно создать собственные роли и capabilities.
- Оптимизировать запросы WP_Query, использовать кэширование.
- Создавать шаблоны в теме для вывода CPT, чтобы не смешивать с обычными записями.
Создание собственного типа записей — мощный инструмент для расширения возможностей WordPress. Даже с минимальным опытом PHP можно быстро внедрить эту функцию и сделать сайт более профессиональным и удобным.