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

Что такое собственный тип постов и зачем он нужен

В WordPress стандартно есть несколько типов записей: записи (posts), страницы (pages), вложения (attachments) и несколько других. Однако часто возникает необходимость добавить уникальный тип контента, который будет отличаться по структуре и логике от стандартных. Например, это могут быть товары, портфолио, отзывы, события и т.д. Для этого используются собственные типы постов (Custom Post Types, CPT).

Создание CPT позволяет лучше организовать контент на сайте, улучшить навигацию и управление, а также расширить функциональность без необходимости создавать отдельные плагины или базы данных.

В этой статье подробно рассмотрим, как создать собственный тип постов в WordPress с помощью кода и разберём основные параметры.

Регистрация собственного типа постов: базовый пример

Для регистрации собственного типа постов нужно использовать функцию register_post_type(). Обычно её вызывают в хуке init. Например, создадим тип поста wpmarketing_portfolio для демонстрации проектов:

function wpmarketing_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' => 'portfolio'),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'comments')
    );

    register_post_type('wpmarketing_portfolio', $args);
}
add_action('init', 'wpmarketing_register_custom_post_type');

Этот код добавит в админ-панель новый пункт меню "Портфолио" с возможностью создавать, редактировать, удалять и просматривать проекты.

Разбор параметров

  • labels — массив с переводами и названиями для разных элементов интерфейса.
  • public — делает тип доступным на фронтенде.
  • rewrite — задаёт человеко-понятный URL для типа (например, site.ru/portfolio/project-name).
  • supports — набор поддерживаемых возможностей (заголовок, редактор, миниатюры и т.д.).
  • has_archive — позволяет иметь архивную страницу с перечнем всех записей типа.

Добавление таксономий к собственному типу постов

Для удобной фильтрации и группировки лучше добавить таксономии. Например, к портфолио можно добавить категорию или теги. Для этого используем функцию register_taxonomy(). Пример регистрации категории 'portfolio_category':

function wpmarketing_register_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' => 'portfolio-category')
    );

    register_taxonomy('portfolio_category', array('wpmarketing_portfolio'), $args);
}
add_action('init', 'wpmarketing_register_taxonomy');

Теперь у каждого проекта можно ставить категорию, что упростит создание фильтров и списков.

Вывод записей собственного типа постов в шаблоне

Чтобы вывести созданные записи на сайте, можно сделать отдельный файл шаблона archive-wpmarketing_portfolio.php или использовать WP_Query. Пример простого вывода в любом шаблоне:

$args = array(
    'post_type' => 'wpmarketing_portfolio',
    'posts_per_page' => 10
);
$portfolio_query = new WP_Query($args);

if ($portfolio_query->have_posts()) {
    echo '<ul>';
    while ($portfolio_query->have_posts()) {
        $portfolio_query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
} else {
    echo 'Проекты не найдены.';
}
wp_reset_postdata();

Такой код позволяет гибко выводить портфолио там, где нужно.

Полезные плагины для работы с собственными типами постов

Хотя регистрация CPT вручную полезна для понимания и точной настройки, есть удобные плагины, которые упрощают создание и управление типами постов без кода:

  • Custom Post Type UI — позволяет через интерфейс создавать CPT и таксономии.
  • Pods — расширенный плагин для создания CPT, таксономий и пользовательских полей.
  • Toolset Types — платный инструмент с мощными возможностями для сложных сайтов.

Если вы хотите добавить кастомные поля к CPT, рекомендую использовать Advanced Custom Fields (ACF) — он отлично сочетается с любыми типами постов.

Советы по SEO и производительности для собственных типов постов

При создании CPT важно учитывать SEO-настройки. Убедитесь, что у вас правильно настроены человеко-читаемые URL (rewrite) и что тип поста доступен для индексации (параметр publicly_queryable). Для управления SEO можно использовать плагины типа Yoast SEO или Rank Math, они поддерживают кастомные типы постов.

Также не перегружайте CPT большим количеством метаданных и таксономий, чтобы не замедлять загрузку страниц и запросы к базе данных.

Оптимизация базы данных WordPress: эффективные методы и практические советы
10.11.2025
Как создать настройку темы WordPress своими руками
22.11.2025
Автоматическое удаление незавершённых заказов в WooCommerce: пошаговое руководство
17.05.2026
Как создать индивидуальный шорткод в WordPress: подробное руководство
31.10.2025
Как автоматически удалять незавершённые заказы WooCommerce по cron
17.06.2026