В мире WordPress собственные типы постов (custom post types) — это мощный инструмент для структурирования контента. Вместо того чтобы ограничиваться стандартными «Записями» и «Страницами», вы можете создавать свои уникальные типы постов, которые идеально подходят под задачи вашего сайта. В этой статье мы подробно разберем, как добавить собственные типы постов в WordPress, какие есть лучшие практики и примеры реализации с помощью кода и плагинов.
Что такое собственные типы постов и зачем они нужны
По умолчанию WordPress предлагает два основных типа контента: записи (posts) и страницы (pages). Однако для многих проектов этого недостаточно. Например, если вы создаете сайт с каталогом фильмов, товарами, портфолио или событиями, стандартные типы постов не дают гибкости в организации и отображении данных.
Собственные типы постов позволяют создавать новые структуры контента с уникальными полями, метками и таксономиями. Это помогает лучше организовать информацию и улучшить UX и SEO.
Преимущества собственных типов постов:
- Четкая организация контента по категориям.
- Возможность добавлять уникальные поля и метаданные.
- Упрощение работы с контентом для редакторов.
- Гибкость в отображении на фронтенде сайта.
Создание собственного типа поста через код
Самый надежный способ добавить собственный тип поста — использовать функцию register_post_type(). Ниже представлен пример, как зарегистрировать тип поста «Фильм» для сайта кинотеатра.
function wpdirect_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' => 'film'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments')
);
register_post_type('wpdirect_film', $args);
}
add_action('init', 'wpdirect_register_custom_post_type');Объяснение кода:
labels— задает тексты и названия для интерфейса административной панели.public— определяет видимость типа поста на сайте.rewrite— отвечает за ЧПУ (человеко-понятные URL).supports— указывает, какие стандартные возможности поста будут доступны (заголовок, редактор, миниатюры и пр.).
После добавления этого кода в файл functions.php вашей темы или в собственный плагин, в админке появится новый пункт меню «Фильмы».
Добавление пользовательских полей и таксономий для нового типа поста
Один тип поста — это еще не всё. Чтобы расширить функциональность, можно добавить пользовательские поля и таксономии. Например, для фильмов полезно иметь жанр, год выпуска и режиссера.
Регистрация таксономии «Жанр»
function wpdirect_register_genre_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' => 'genre')
);
register_taxonomy('wpdirect_genre', array('wpdirect_film'), $args);
}
add_action('init', 'wpdirect_register_genre_taxonomy');Этот код добавит иерархическую таксономию «Жанры», похожую на категории, для типа поста «Фильм».
Добавление метаполей с помощью плагина Advanced Custom Fields
Для удобного добавления и управления пользовательскими полями рекомендуем использовать плагин Advanced Custom Fields (ACF). Он позволяет создавать поля с разными типами данных (текст, дата, выпадающий список) без программирования.
Пример полей для фильмов:
- Год выпуска (число)
- Режиссер (текст)
- Продолжительность (число в минутах)
После создания полей через ACF, их можно вывести в шаблоне следующим образом:
function wpdirect_show_film_meta() {
$year = get_field('year');
$director = get_field('director');
$duration = get_field('duration');
if ($year || $director || $duration) {
echo '<div class="film-meta">';
if ($year) echo '<p>Год выпуска: ' . esc_html($year) . '</p>';
if ($director) echo '<p>Режиссер: ' . esc_html($director) . '</p>';
if ($duration) echo '<p>Продолжительность: ' . esc_html($duration) . ' мин</p>';
echo '</div>';
}
}Плагины для создания и управления собственными типами постов
Если вы не хотите писать код, есть несколько популярных плагинов, которые помогут создать и настроить собственные типы постов без единой строки кода:
- Custom Post Type UI — мощный и удобный плагин для регистрации типов постов и таксономий через интерфейс.
- Pods — расширенный плагин для создания кастомных типов, таксономий и пользовательских полей.
- Toolset Types — коммерческий плагин с большим набором функций для работы с типами постов и связями между ними.
Например, с помощью Custom Post Type UI вы создадите тип 'Фильм' за несколько минут, а потом подключите к нему пользовательские поля через ACF.
Советы по работе с собственными типами постов в WordPress
Чтобы максимизировать эффективность работы с кастомными типами постов, учитывайте следующие рекомендации:
- Уникальные префиксы в названиях функций и типов. Используйте префикс вашего сайта (например, wpdirect) для избежания конфликтов.
- Зарегистрируйте типы и таксономии на хук
init. Это обеспечивает корректную работу и совместимость. - Добавьте поддержку ЧПУ. Убедитесь, что в настройках постоянных ссылок включена поддержка кастомных типов.
- Оптимизируйте запросы. При вывода контента используйте WP_Query с параметром
post_type. - Обновляйте пермалинки. После регистрации нового типа поста перейдите в настройки постоянных ссылок и просто сохраните их, чтобы обновить правила перезаписи.
Пример вывода кастомных постов на фронтенде
Для вывода списка фильмов на странице можно использовать следующий код:
$args = array(
'post_type' => 'wpdirect_film',
'posts_per_page' => 10,
'orderby' => 'date',
'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul class="film-list">';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
} else {
echo '<p>Фильмы не найдены.</p>';
}
wp_reset_postdata();Этот простой цикл выводит 10 последних фильмов с ссылками на их страницы.
Заключение
Добавление собственных типов постов — один из ключевых способов сделать ваш WordPress-сайт уникальным и удобным для пользователя. Используйте код или плагины, комбинируйте с пользовательскими полями и таксономиями, чтобы получить гибкую и мощную систему для управления любым контентом.