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

Произвольные типы постов (Custom Post Types, CPT) — мощный инструмент WordPress, позволяющий расширить функциональность сайта за пределы стандартных записей и страниц. С их помощью можно создавать специализированные разделы, например, портфолио, отзывы, товары и многое другое.

Что такое произвольные типы постов и зачем они нужны

По умолчанию WordPress работает с двумя основными типами содержимого: записи (post) и страницы (page). Однако часто бывает необходимо добавить новые типы контента с уникальными свойствами и отображением. Например, если вы ведёте сайт агентства, вам может понадобиться тип поста «Проекты», где каждая запись будет содержать отдельный проект с описанием, датами и изображениями.

Создание CPT позволяет структурировать контент, упростить его управление в админке и вывести на фронтенде так, как нужно. Кроме того, CPT интегрируются с таксономиями, метаданными и другими возможностями WordPress.

Регистрация произвольного типа поста через functions.php

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

Рассмотрим пример регистрации CPT «Проекты».

function wpsetup_register_cpt_projects() {
    $labels = array(
        'name'               => 'Проекты',
        'singular_name'      => 'Проект',
        'add_new'            => 'Добавить проект',
        'add_new_item'       => 'Добавить новый проект',
        'edit_item'          => 'Редактировать проект',
        'new_item'           => 'Новый проект',
        'view_item'          => 'Просмотреть проект',
        'search_items'       => 'Искать проекты',
        'not_found'          => 'Проекты не найдены',
        'not_found_in_trash' => 'В корзине проектов не найдено',
        'menu_name'          => 'Проекты'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'projects'),
        'show_in_rest'       => true, // для поддержки Gutenberg
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-portfolio',
        'taxonomies'         => array('category', 'post_tag')
    );

    register_post_type('wpsetup_project', $args);
}
add_action('init', 'wpsetup_register_cpt_projects');

В этом примере мы создали CPT с ярлыком wpsetup_project. В админке появится новый пункт меню «Проекты» с удобным интерфейсом для добавления и редактирования.

Подключение таксономий к произвольному типу постов

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

Добавление стандартных категорий и меток

В примере выше к CPT подключены стандартные таксономии 'category' и 'post_tag'. Это позволит использовать привычное разбиение на категории и теги.

Создание собственной таксономии

Если необходимо создать уникальную таксономию, например, «Тип проекта», можно использовать функцию register_taxonomy():

function wpsetup_register_taxonomy_project_type() {
    $labels = array(
        'name'              => 'Типы проектов',
        'singular_name'     => 'Тип проекта',
        'search_items'      => 'Искать типы проектов',
        'all_items'         => 'Все типы проектов',
        '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' => 'project-type'),
        'show_in_rest'      => true
    );

    register_taxonomy('wpsetup_project_type', array('wpsetup_project'), $args);
}
add_action('init', 'wpsetup_register_taxonomy_project_type');

После регистрации таксономии она появится в редакторе «Проектов» и позволит гибко классифицировать записи.

Вывод произвольных типов постов на фронтенде

Чтобы вывести список проектов на сайте, можно создать файл шаблона archive-wpsetup_project.php в вашей теме. В этом файле используйте стандартный цикл WordPress:

<?php get_header(); ?>

<h1>Наши проекты</h1>

<?php if ( have_posts() ) : ?>
    <ul>
    <?php while ( have_posts() ) : the_post(); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            <p><?php the_excerpt(); ?></p>
        </li>
    <?php endwhile; ?>
    </ul>
<?php else : ?>
    <p>Проекты не найдены.</p>
<?php endif; ?>

<?php get_footer(); ?>

Так вы получите простую страницу архива с перечнем всех записей CPT.

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

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

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

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

Практические советы и частые ошибки при работе с CPT

При работе с произвольными типами постов помните:

  • Используйте уникальный префикс для названий функций и ярлыков, чтобы избежать конфликтов с плагинами и темами. В примерах мы использовали wpsetup_.
  • Обязательно регистрируйте CPT и таксономии на хук init, чтобы WordPress корректно их распознал.
  • Если CPT должны поддерживать редактор Gutenberg, включайте параметр show_in_rest = true.
  • Не забывайте создавать шаблоны для отображения CPT на сайте, чтобы вывести их в нужном виде.
  • При изменении параметров CPT или таксономий не забудьте обновить постоянные ссылки в админке через «Настройки — Постоянные ссылки».

Заключение

Произвольные типы постов — это базовый инструмент для построения кастомных сайтов на WordPress. Они позволяют структурировать контент и создавать уникальные разделы без избыточных плагинов. Используйте приведённые примеры кода, чтобы быстро начать работу и адаптировать их под свои задачи.

Для удобного создания CPT без кода рекомендуем попробовать плагин Custom Post Type UI от WPSHOP.

Как создать динамическое меню в WordPress: пошаговое руководство
21.11.2025
WooCommerce не отображает товары при фильтрации AJAX: как исправить проблему
20.04.2026
Как создать последовательность выполнения функций в WordPress
15.02.2026
WooCommerce не отображает товары при фильтрации AJAX: диагностика и решение
28.04.2026
Как создать настройку для темы WordPress в админке
07.11.2025