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

В этой статье мы подробно разберём, как добавить собственные типы постов (Custom Post Types, CPT) в WordPress. Это одна из самых востребованных и практичных возможностей CMS, которая помогает расширить функционал сайта, адаптируя его под задачи любого проекта — от портфолио до интернет-магазина.

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

По умолчанию WordPress работает с несколькими типами контента: посты (записи), страницы, вложения, ревизии и т.п. Однако для сложных проектов этих стандартных типов часто недостаточно. Для этого и придуманы собственные типы постов — они позволяют создавать новые сущности с уникальной логикой, набором полей и отображением.

Например, если вы ведёте сайт с рецептами, можно создать тип поста recipe, в котором будут свои поля для ингредиентов, времени приготовления, калорийности и т.д. Или для сайта недвижимости — тип property с адресом, ценой и картой.

Добавление CPT улучшает структуру контента, повышает удобство управления и делает сайт более гибким.

Создание собственного типа поста через functions.php — пример кода

Самый базовый способ — зарегистрировать CPT через функцию register_post_type() в файле темы functions.php. Рассмотрим пример создания типа поста wpfaq_portfolio для портфолио.

function wpfaq_register_custom_post_type() {
    $labels = array(
        'name'               => 'Портфолио',
        'singular_name'      => 'Портфолио',
        'add_new'            => 'Добавить работу',
        'add_new_item'       => 'Добавить новую работу',
        'edit_item'          => 'Редактировать работу',
        'new_item'           => 'Новая работа',
        'all_items'          => 'Все работы',
        'view_item'          => 'Просмотреть работу',
        'search_items'       => 'Поиск работ',
        'not_found'          => 'Работ не найдено',
        'not_found_in_trash' => 'В корзине работ не найдено',
        'menu_name'          => 'Портфолио'
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'portfolio'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt'),
        'show_in_rest'       => true,
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
    );
    register_post_type('wpfaq_portfolio', $args);
}
add_action('init', 'wpfaq_register_custom_post_type');

Данный код создаёт новый тип поста с названием «Портфолио», который появится в админке WordPress в меню. Включена поддержка заголовка, редактора, миниатюр и отрывков, а также REST API для работы с блоковым редактором Gutenberg.

Пояснения к параметрам

  • public — делает тип доступным для публичного отображения.
  • has_archive — включает архивную страницу для CPT по адресу /portfolio/.
  • rewrite — задаёт правила ЧПУ.
  • supports — указывает, какие мета-блоки будут доступны для редактирования.
  • show_in_rest — включает поддержку REST API, необходимую для Gutenberg и некоторых плагинов.

Использование плагинов для создания собственных типов постов

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

1. Custom Post Type UI

Очень популярный плагин с интуитивно понятным интерфейсом для создания CPT и таксономий. Позволяет создавать типы постов без кода, экспортировать и импортировать настройки.

Преимущества:

  • Поддержка всех основных параметров register_post_type()
  • Интеграция с таксономиями
  • Совместимость с ACF и другими плагинами для мета-полей

2. Pods Framework

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

3. Toolset Types

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

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

Для расширения функционала CPT часто нужно добавить кастомные поля. Для этого можно использовать:

  • Плагин Advanced Custom Fields (ACF)
  • Ручное создание мета-боксов через add_meta_box()

Пример создания мета-бокса вручную

function wpfaq_add_custom_meta_box() {
    add_meta_box(
        'wpfaq_portfolio_details',
        'Детали портфолио',
        'wpfaq_display_portfolio_meta_box',
        'wpfaq_portfolio',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpfaq_add_custom_meta_box');

function wpfaq_display_portfolio_meta_box($post) {
    $client = get_post_meta($post->ID, '_wpfaq_client', true);
    wp_nonce_field('wpfaq_save_portfolio_meta', 'wpfaq_portfolio_nonce');
    echo '<label for="wpfaq_client">Клиент:</label>';
    echo '<input type="text" id="wpfaq_client" name="wpfaq_client" value="'.esc_attr($client).'" size="25" />';
}

function wpfaq_save_portfolio_meta($post_id) {
    if (!isset($_POST['wpfaq_portfolio_nonce']) || !wp_verify_nonce($_POST['wpfaq_portfolio_nonce'], 'wpfaq_save_portfolio_meta')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpfaq_client'])) {
        update_post_meta($post_id, '_wpfaq_client', sanitize_text_field($_POST['wpfaq_client']));
    }
}
add_action('save_post', 'wpfaq_save_portfolio_meta');

Этот код добавляет мета-бокс с полем «Клиент» в редактор портфолио, сохраняет и выводит данные.

Отображение собственных типов постов на фронтенде

Чтобы вывести CPT на сайте, можно создать шаблон архивной страницы archive-wpfaq_portfolio.php в теме или использовать WP_Query для выборки.

$args = array(
    'post_type' => 'wpfaq_portfolio',
    'posts_per_page' => 10
);
$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 'Работы не найдены';
}

Такой код можно разместить в любом шаблоне темы для вывода списка записей портфолио.

SEO и собственные типы постов — практические советы

Для лучшего SEO важно правильно настроить URL и индексацию CPT:

  • Используйте ЧПУ (rewrite) с понятным слагом
  • Подключите поддержку sitemap для CPT (например, в Yoast SEO)
  • Настройте мета-теги и заголовки для CPT
  • Избегайте дублирующего контента — используйте canonical и noindex для архивов, если нужно

Это повысит видимость ваших собственных типов постов в поисковых системах и улучшит пользовательский опыт.

WooCommerce: решение проблемы с исчезновением SKU после изменения атрибутов товара
23.05.2026
WooCommerce: решение проблемы с отображением товаров после обновления кеша
11.05.2026
Как сделать автоматический редирект по условиям в WordPress
28.03.2026
Удаление неиспользуемых изображений в WordPress для оптимизации сайта
20.12.2025
WooCommerce: как автоматически удалять товары без склада из каталога
05.06.2026