В современной разработке тем для WordPress часто возникает задача настроить уникальное отображение для разных типов записей (custom post types). Это позволяет структурировать контент и сделать сайт более удобным для пользователя. В этой статье разберём, как правильно реализовать поддержку и кастомизацию вывода различных типов записей прямо в вашей теме.
Что такое типы записей в WordPress и зачем их кастомизировать
По умолчанию WordPress имеет стандартные типы записей — записи (posts) и страницы (pages). Но для расширения функционала сайта можно создавать свои типы записей, например, «Портфолио», «Отзывы», «События» и т.д. Каждый тип записи может иметь свои поля, таксономии и, самое главное, собственный способ отображения на сайте.
Кастомизация позволяет сделать вывод данных каждого типа максимально релевантным и удобным. Например, для портфолио можно вывести галерею изображений, для событий — дату и место проведения, а для отзывов — рейтинг.
Регистрация собственного типа записи с поддержкой шаблонов
Для начала зарегистрируем собственный тип записи в файле темы functions.php. Рассмотрим пример для типа записи portfolio:
function wpthemes_register_post_types() {
$labels = array(
'name' => 'Портфолио',
'singular_name' => 'Портфолио',
'menu_name' => 'Портфолио',
'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'),
'show_in_rest' => true
);
register_post_type('portfolio', $args);
}
add_action('init', 'wpthemes_register_post_types');Этот код создаёт новый тип записи с названием «Портфолио», который поддерживает заголовок, редактор, миниатюру и краткое описание, а также интегрируется с редактором Gutenberg (show_in_rest).
Создание шаблонов для кастомных типов записей
Чтобы настроить вывод типа записи, нужно создать отдельные шаблоны в теме:
single-portfolio.php— для отдельной записи портфолио;archive-portfolio.php— для страницы архива портфолио.
В файле single-portfolio.php можно вывести кастомные поля, галереи или другие данные. Пример минимального шаблона:
<?php get_header(); ?>
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="portfolio-content">
<?php the_content(); ?>
<?php if(has_post_thumbnail()) : ?>
<div class="portfolio-thumbnail">
<?php the_post_thumbnail('large'); ?>
</div>
<?php endif; ?>
</div>
<?php endwhile; endif; ?>
<?php get_footer(); ?>Для архива создаём archive-portfolio.php, где можно вывести список всех элементов с пагинацией и фильтрацией.
Добавление кастомных полей и их вывод в шаблонах
Для расширения данных типа записи можно использовать кастомные поля через плагины, например, Advanced Custom Fields (ACF) или написать простую функцию для вывода мета-полей.
Пример добавления и вывода мета-поля «Год создания» для портфолио:
function wpthemes_add_meta_boxes() {
add_meta_box('wpthemes_portfolio_year', 'Год создания', 'wpthemes_portfolio_year_callback', 'portfolio', 'side', 'default');
}
add_action('add_meta_boxes', 'wpthemes_add_meta_boxes');
function wpthemes_portfolio_year_callback($post) {
$value = get_post_meta($post->ID, '_portfolio_year', true);
echo '<input type="number" name="_portfolio_year" value="' . esc_attr($value) . '" style="width:100%;" />';
}
function wpthemes_save_postdata($post_id) {
if(array_key_exists('_portfolio_year', $_POST)) {
update_post_meta($post_id, '_portfolio_year', sanitize_text_field($_POST['_portfolio_year']));
}
}
add_action('save_post', 'wpthemes_save_postdata');Теперь в шаблоне single-portfolio.php можно вывести это поле:
<?php
$year = get_post_meta(get_the_ID(), '_portfolio_year', true);
if($year) {
echo '<p><strong>Год создания:</strong> ' . esc_html($year) . '</p>';
}
?>Фильтрация и сортировка записей кастомного типа в цикле
Чтобы вывести записи определённым образом на странице архива или в любом месте темы, используйте WP_Query с параметрами фильтрации:
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => 10,
'meta_key' => '_portfolio_year',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);
$query = new WP_Query($args);
if($query->have_posts()) {
while($query->have_posts()) {
$query->the_post();
// вывод записи
}
wp_reset_postdata();
}Так можно вывести последние 10 портфолио, отсортированных по году создания в порядке убывания.
Поддержка пагинации и SEO для кастомных типов записей
Не забудьте добавить поддержку пагинации в архиве, чтобы пользователь мог листать страницы. Для этого используйте функцию the_posts_pagination() или paginate_links(). В файле archive-portfolio.php пример:
<?php
if(have_posts()) :
while(have_posts()) : the_post();
?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php
endwhile;
the_posts_pagination(array(
'mid_size' => 2,
'prev_text' => 'Назад',
'next_text' => 'Вперёд'
));
else :
echo '<p>Записей не найдено.</p>';
endif;
?>Также важно правильно настроить ЧПУ (человеко-понятные урлы) в настройках пермалинков и проверить, что для типа записи установлен параметр has_archive => true.
Примеры полезных плагинов для работы с кастомными типами записей
Для удобства работы с типами записей и кастомными полями советую обратить внимание на следующие плагины:
- Clearfy Pro — оптимизация и расширение возможностей, в том числе для кастомных типов;
- WPRemark — расширение комментариев и отзывов, можно интегрировать с кастомными типами;
- Advanced Custom Fields (бесплатный плагин в репозитории WordPress) — для создания и управления мета-полями.
Итоги и рекомендации по работе с кастомными типами записей
Настройка отображения разных типов записей в теме WordPress — это мощный инструмент для создания уникальных сайтов с гибкой структурой контента. Важно:
- Правильно зарегистрировать тип записи с нужными параметрами и поддержкой шаблонов;
- Создать отдельные шаблоны
single-иarchive-для вывода; - Добавить кастомные поля для расширения данных;
- Использовать WP_Query для фильтрации и сортировки;
- Обеспечить корректную пагинацию и SEO-настройки;
- Использовать проверенные плагины для упрощения работы.
Такой подход даёт полный контроль над контентом и улучшает опыт пользователей вашего сайта.