Создание кастомных типов записей и таксономий в WordPress с примерами кода

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

Что такое кастомные типы записей и таксономии в WordPress

Кастомные типы записей — это альтернативные типы контента, отличные от стандартных «Записей» и «Страниц». Например, если вы создаёте сайт агентства, можно сделать CPT «Проекты» с набором полей и шаблоном вывода.

Таксономии — это способ группировки записей. По умолчанию есть категории и метки, но можно создавать свои, например, «Типы проектов» или «Темы».

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

Регистрация кастомного типа записей: пример кода

Для регистрации CPT используется функция register_post_type(). Ниже пример создания типа записей portfolio с базовыми настройками.

function wptemplates_register_post_type_portfolio() {
    $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' => 'portfolio'),
        'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'show_in_rest' => true
    );

    register_post_type('portfolio', $args);
}
add_action('init', 'wptemplates_register_post_type_portfolio');

Этот код помещаем в файл functions.php вашей темы или в отдельный плагин. После активации в админке появится новый пункт меню «Портфолио».

Создание кастомной таксономии для типа портфолио

Чтобы сделать фильтрацию проектов удобной, создадим таксономию project_type. Это может быть, например, «Веб-дизайн», «Фотография» и т.п.

function wptemplates_register_taxonomy_project_type() {
    $labels = array(
        'name' => 'Типы проектов',
        'singular_name' => 'Тип проекта',
        'search_items' => 'Искать типы',
        'all_items' => 'Все типы',
        'edit_item' => 'Редактировать тип',
        'add_new_item' => 'Добавить новый тип',
        'menu_name' => 'Типы проектов'
    );

    $args = array(
        'labels' => $labels,
        'hierarchical' => true, // как категории
        'show_ui' => true,
        'show_in_rest' => true,
        'rewrite' => array('slug' => 'project-type')
    );

    register_taxonomy('project_type', array('portfolio'), $args);
}
add_action('init', 'wptemplates_register_taxonomy_project_type');

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

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

Для вывода созданных записей используйте WP_Query с параметром post_type. Пример выборки последних 5 проектов с таксономией:

$args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => 5,
    'tax_query' => array(
        array(
            'taxonomy' => 'project_type',
            'field' => 'slug',
            'terms' => 'web-design',
        ),
    ),
);

$portfolio_query = new WP_Query($args);

if ($portfolio_query->have_posts()) {
    while ($portfolio_query->have_posts()) {
        $portfolio_query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        the_excerpt();
    }
    wp_reset_postdata();
} else {
    echo 'Проекты не найдены';
}

Этот код можно вставить в любой шаблон темы, например, в страницу архива или отдельный шаблон.

Плагины для удобного создания CPT и таксономий

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

  • Custom Post Type UI — очень популярный и простой плагин для регистрации CPT и таксономий.
  • Pods — расширенный плагин с возможностью создавать и настраивать типы записей, таксономии и дополнительные поля.
  • ACF (Advanced Custom Fields) — не создаёт CPT, но позволяет очень гибко настраивать дополнительные поля для любых типов записей.

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

Советы по работе с кастомными типами записей

При работе с CPT и таксономиями стоит учитывать несколько важных моментов:

  • ЧПУ и пермалинки: после регистрации CPT и таксономий обязательно обновите постоянные ссылки в админке (Настройки → Постоянные ссылки), чтобы новые URL заработали корректно.
  • Поддержка REST API: добавляйте параметр 'show_in_rest' => true, если планируете использовать Gutenberg или создавать фронтенд на React/Vue с использованием WP REST API.
  • SEO: для SEO важна правильная структура. Используйте плагины типа Yoast SEO или Rank Math — большинство поддерживают кастомные типы записей.
  • Кэширование: при интенсивной работе с CPT следите за кэшированием, чтобы не показывать устаревшие данные.

Пример комплексного решения: портфолио с фильтрацией

Объединим всё вместе: CPT «Портфолио», таксономия «Типы проектов» и вывод с фильтром через AJAX.

1. Регистрируем CPT и таксономию, как показано выше.

2. Создаём фронтенд фильтр, где пользователь выбирает тип проекта.

3. Через AJAX отправляем запрос на сервер и возвращаем список проектов.

Вот упрощённый пример AJAX-запроса (вставьте в JS вашего шаблона):

jQuery(document).ready(function($) {
    $('#project-type-filter').on('change', function() {
        var term = $(this).val();
        $.ajax({
            url: wptemplates_ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'wptemplates_filter_portfolio',
                project_type: term
            },
            success: function(response) {
                $('#portfolio-list').html(response);
            }
        });
    });
});

И PHP-код обработчика:

function wptemplates_ajax_filter_portfolio() {
    $term = sanitize_text_field($_POST['project_type']);

    $args = array(
        'post_type' => 'portfolio',
        'posts_per_page' => -1,
    );

    if (!empty($term)) {
        $args['tax_query'] = array(
            array(
                'taxonomy' => 'project_type',
                'field' => 'slug',
                'terms' => $term,
            ),
        );
    }

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            echo '<div class="portfolio-item"><h3>' . get_the_title() . '</h3></div>';
        }
        wp_reset_postdata();
    } else {
        echo 'Проекты не найдены';
    }
    wp_die();
}
add_action('wp_ajax_wptemplates_filter_portfolio', 'wptemplates_ajax_filter_portfolio');
add_action('wp_ajax_nopriv_wptemplates_filter_portfolio', 'wptemplates_ajax_filter_portfolio');

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

Заключение

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

Для удобной работы с CPT и оптимизации рекомендуем изучить и использовать плагины с https://wpshop.ru/?utm_source=wptemplates.ru&utm_medium=article&utm_campaign=custom-post-types-taxonomies-wp, такие как Clearfy Pro, которые помогут сделать ваш сайт быстрее и безопаснее.

Как изменить URL страницы регистрации WordPress без плагинов
13.01.2026
Удаление и блокировка плагинов WordPress, если стандартные методы не работают
16.01.2026
WooCommerce: как автоматически удалять неактивные товары по дате последнего обновления
24.05.2026
WooCommerce: как изменить стоимость товаров в корзине без пересчета
21.05.2026
Создание кастомных типов записей и таксономий в WordPress с примерами кода
12.12.2025