В WordPress стандартно доступны несколько типов записей: записи (posts), страницы (pages), вложения и др. Но часто для удобства организации контента требуется создать собственные уникальные типы записей (Custom Post Types, CPT). В этой статье подробно разберём, как создавать такие типы, какие есть нюансы, какие плагины помогают в этом и приведём примеры кода для wpwebsite.ru.
Что такое уникальные типы записей в WordPress и зачем они нужны
Уникальные типы записей — это способ расширить стандартную структуру WordPress, добавив новые сущности, которые ведут себя как записи, но имеют собственный набор полей, метаданных и шаблонов отображения. Например, можно создать тип "Портфолио", "Отзывы", "Проекты" или "События".
Использование CPT позволяет:
- Структурировать контент более логично для пользователя и администратора;
- Создавать отдельные шаблоны для разных типов контента;
- Улучшать SEO за счёт уникальных URL и метаданных;
- Облегчать работу с большим объёмом данных.
На wpwebsite.ru создание и настройка CPT — частая задача для кастомизации сайтов клиентов.
Регистрация уникального типа записи: базовый пример кода
Для регистрации CPT используется функция register_post_type. Ниже пример простейшей регистрации типа "portfolio" в файле functions.php вашей темы или в собственном плагине.
function wpwebsite_register_portfolio_cpt() {
$labels = array(
'name' => 'Портфолио',
'singular_name' => 'Портфолио',
'menu_name' => 'Портфолио',
'all_items' => 'Все портфолио',
'add_new_item' => 'Добавить новый элемент портфолио',
'edit_item' => 'Редактировать элемент',
'new_item' => 'Новый элемент',
'view_item' => 'Просмотреть элемент',
'search_items' => 'Поиск по портфолио',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'portfolio'),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'show_in_rest' => true, // для Gutenberg и REST API
);
register_post_type('wpwebsite_portfolio', $args);
}
add_action('init', 'wpwebsite_register_portfolio_cpt');Обратите внимание, что для удобства и чтобы избежать конфликтов, префикс функции и типа записи — wpwebsite_. Это хорошая практика для кастомных решений.
Расширение функционала: кастомные таксономии и метаполя
Для удобной категоризации CPT логично добавить кастомные таксономии. Например, для портфолио можно добавить таксономию "Тип проекта".
function wpwebsite_register_portfolio_taxonomy() {
$labels = array(
'name' => 'Типы проектов',
'singular_name' => 'Тип проекта',
'search_items' => 'Искать типы',
'all_items' => 'Все типы',
'edit_item' => 'Редактировать тип',
'add_new_item' => 'Добавить новый тип',
);
register_taxonomy('wpwebsite_project_type', 'wpwebsite_portfolio', array(
'labels' => $labels,
'hierarchical' => true,
'show_in_rest' => true,
'rewrite' => array('slug' => 'project-type'),
));
}
add_action('init', 'wpwebsite_register_portfolio_taxonomy');Для добавления метаполей удобнее использовать плагины, например Clearfy Pro, который позволяет создавать пользовательские поля без кода, или Advanced Custom Fields (ACF).
Пример добавления метаполя вручную:
function wpwebsite_add_portfolio_meta_box() {
add_meta_box('wpwebsite_portfolio_details', 'Детали портфолио', 'wpwebsite_portfolio_meta_box_callback', 'wpwebsite_portfolio', 'normal', 'high');
}
add_action('add_meta_boxes', 'wpwebsite_add_portfolio_meta_box');
function wpwebsite_portfolio_meta_box_callback($post) {
$client = get_post_meta($post->ID, '_wpwebsite_client', true);
echo '<label for="wpwebsite_client">Клиент:</label>';
echo '<input type="text" id="wpwebsite_client" name="wpwebsite_client" value="'.esc_attr($client).'" size="25" />';
}
function wpwebsite_save_portfolio_meta($post_id) {
if (array_key_exists('wpwebsite_client', $_POST)) {
update_post_meta($post_id, '_wpwebsite_client', sanitize_text_field($_POST['wpwebsite_client']));
}
}
add_action('save_post', 'wpwebsite_save_portfolio_meta');Полезные плагины для работы с уникальными типами записей
Кроме Clearfy Pro, есть несколько плагинов, которые значительно упрощают создание и настройку CPT:
- Custom Post Type UI — визуальный интерфейс для создания CPT и таксономий, позволяет быстро добавить тип без кода;
- Pods — расширенный инструмент для создания CPT, таксономий и кастомных полей с гибкими настройками;
- Toolset Types — мощный платный плагин с возможностью создавать сложные типы и связи между ними;
- ACF (Advanced Custom Fields) — для добавления и управления метаполями, совместим с CPT.
Для профессиональных сайтов, где требуется интеграция CPT с REST API и Gutenberg, стоит обратить внимание на тему Reboot от WPSHOP, которая изначально оптимизирована под кастомные типы.
Как вывести уникальные типы записей на фронтенде: примеры шаблонов и запроса WP_Query
Чтобы отображать CPT на сайте, нужно создать шаблон архива или отдельной записи. Файл архива должен называться archive-wpwebsite_portfolio.php, а одиночной записи — single-wpwebsite_portfolio.php.
Пример простого запроса для вывода 5 последних элементов портфолио:
$args = array(
'post_type' => 'wpwebsite_portfolio',
'posts_per_page' => 5,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
the_excerpt();
}
wp_reset_postdata();
} else {
echo 'Портфолио не найдено';
}
Также можно выводить метаполя и таксономии, используя функции get_post_meta и get_the_terms.
Пример вывода метаполя "Клиент" и таксономии "Тип проекта"
while ($query->have_posts()) {
$query->the_post();
$client = get_post_meta(get_the_ID(), '_wpwebsite_client', true);
$types = get_the_terms(get_the_ID(), 'wpwebsite_project_type');
echo '<h2>' . get_the_title() . '</h2>';
echo '<p><strong>Клиент:</strong> ' . esc_html($client) . '</p>';
if (!empty($types) && !is_wp_error($types)) {
$type_names = wp_list_pluck($types, 'name');
echo '<p><strong>Тип проекта:</strong> ' . implode(', ', $type_names) . '</p>';
}
}
wp_reset_postdata();SEO и пермалинки для уникальных типов записей
При создании CPT важно настроить правильные URL, чтобы они были понятными и дружелюбными для поисковиков. В параметрах rewrite указывайте уникальный slug, например portfolio. После регистрации CPT рекомендуется перейти в "Настройки > Постоянные ссылки" и сохранить их заново, чтобы обновить правила перезаписи.
Рекомендуется также использовать SEO-плагины, поддерживающие CPT, например Clearfy Pro, чтобы улучшить SEO-настройки для каждого типа записи.
Типичные ошибки при создании уникальных типов записей и как их избежать
Часто встречаются следующие проблемы:
- Неверный префикс в функции регистрации, из-за чего CPT конфликтует с другими плагинами;
- Отсутствие параметра
show_in_rest, из-за чего CPT не отображается в редакторе Gutenberg; - Не обновлены правила пермалинков после регистрации CPT;
- Плохая поддержка таксономий и метаполей, из-за чего контент сложно структурировать;
- Отсутствие шаблонов для отображения CPT на фронтенде.
Решение — использовать аккуратный префикс (wpwebsite_), проверять все параметры и тестировать вывод на сайте.
Выводы и рекомендации для wpwebsite.ru
Создание уникальных типов записей — мощный инструмент для расширения функционала WordPress. Правильно реализованные CPT улучшают структуру сайта, удобство управления и SEO. Для wpwebsite.ru советую использовать регистрируемые вручную CPT с префиксом wpwebsite_, дополнять их таксономиями и метаполями через плагины Clearfy Pro или ACF, а также создавать отдельные шаблоны для фронтенда.
Если нужно быстро создать CPT без кода, можно использовать Custom Post Type UI. Для комплексных проектов с большим количеством типов и связей подойдет Pods или Toolset.