Как добавить собственные типы постов в WordPress

В мире 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

Чтобы максимизировать эффективность работы с кастомными типами постов, учитывайте следующие рекомендации:

  1. Уникальные префиксы в названиях функций и типов. Используйте префикс вашего сайта (например, wpdirect) для избежания конфликтов.
  2. Зарегистрируйте типы и таксономии на хук init. Это обеспечивает корректную работу и совместимость.
  3. Добавьте поддержку ЧПУ. Убедитесь, что в настройках постоянных ссылок включена поддержка кастомных типов.
  4. Оптимизируйте запросы. При вывода контента используйте WP_Query с параметром post_type.
  5. Обновляйте пермалинки. После регистрации нового типа поста перейдите в настройки постоянных ссылок и просто сохраните их, чтобы обновить правила перезаписи.

Пример вывода кастомных постов на фронтенде

Для вывода списка фильмов на странице можно использовать следующий код:

$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-сайт уникальным и удобным для пользователя. Используйте код или плагины, комбинируйте с пользовательскими полями и таксономиями, чтобы получить гибкую и мощную систему для управления любым контентом.

Как создать мультиязычный сайт на WordPress без плагинов
14.12.2025
WooCommerce: автоматическое удаление отменённых заказов по расписанию с оптимизацией
19.06.2026
Как создать автоматические заголовки для постов в WordPress
22.12.2025
Как создать умное обновление данных в WordPress с помощью Webhook’ов
18.02.2026
Как удалить пустые категории и теги в WordPress
24.11.2025