Создаем кастомный тип записей с таксономиями и REST API в WordPress

Зачем создавать кастомный тип записей и таксономии в WordPress

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

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

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

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

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

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

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'show_in_rest'       => true, // Включаем REST API
        'rest_base'          => 'books',
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'),
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-book',
        'rewrite'            => array('slug' => 'books'),
    );

    register_post_type('books', $args);
}
add_action('init', 'wpplugins_register_cpt_books');

Обратите внимание на параметр show_in_rest, он включает поддержку REST API, что позволит работать с записями типа books через стандартные эндпоинты WordPress.

Создание кастомной таксономии для CPT

Теперь добавим таксономию для «жанров» книг. Для этого используем функцию register_taxonomy(). Таксономия будет иерархической, похожей на категории.

function wpplugins_register_taxonomy_genres() {
    $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'),
        'show_in_rest'      => true, // Включаем REST API
        'rest_base'         => 'genres',
    );

    register_taxonomy('genre', array('books'), $args);
}
add_action('init', 'wpplugins_register_taxonomy_genres');

Теперь у каждого объекта типа «Книга» можно будет задать один или несколько жанров, что удобно для фильтрации и организации.

Работа с кастомным типом записей и таксономиями через REST API

Подключение к REST API открывает множество возможностей. Например, можно получить список книг с жанрами через AJAX или внешнее приложение. Ниже пример базового запроса:

GET https://example.com/wp-json/wp/v2/books

Чтобы получить книги, относящиеся к определенному жанру, используйте параметр таксономии, например:

GET https://example.com/wp-json/wp/v2/books?genre=3

где 3 — ID жанра. Можно использовать и слаг жанра, если настроен.

Добавление записи через REST API

Для добавления новой записи через REST API нужно отправить POST-запрос с данными. Пример на PHP с использованием wp_remote_post():

$response = wp_remote_post('https://example.com/wp-json/wp/v2/books', array(
    'headers' => array(
        'Authorization' => 'Bearer your_jwt_token',
        'Content-Type'  => 'application/json',
    ),
    'body'    => json_encode(array(
        'title'   => 'Новая книга',
        'status'  => 'publish',
        'genres'  => array(3), // ID жанров
        'content' => 'Описание книги',
    )),
));

if (is_wp_error($response)) {
    error_log('Ошибка при создании книги: ' . $response->get_error_message());
} else {
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    error_log('Книга создана с ID: ' . $data['id']);
}

Для авторизации в REST API рекомендую использовать JWT или OAuth, чтобы обеспечить безопасность.

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

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

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

Для REST API стоит проверить, что в настройках плагина включена поддержка show_in_rest.

Расширение функционала: добавление пользовательских полей и фильтров в запросы REST API

Часто нужно, чтобы в REST API возвращались не только стандартные поля, но и кастомные метаполя. Для этого можно использовать хук rest_prepare_{$post_type}.

function wpplugins_add_custom_fields_to_rest($response, $post, $request) {
    if ($post->post_type !== 'books') {
        return $response;
    }

    $meta = get_post_meta($post->ID);
    $response->data['custom_fields'] = array(
        'price' => isset($meta['price'][0]) ? $meta['price'][0] : '',
        'isbn'  => isset($meta['isbn'][0]) ? $meta['isbn'][0] : '',
    );
    return $response;
}
add_filter('rest_prepare_books', 'wpplugins_add_custom_fields_to_rest', 10, 3);
<

Таким образом, при запросе через REST API вы получите дополнительные данные, которые можно использовать на фронтенде.

Фильтрация записей по кастомным полям через REST API

По умолчанию WordPress REST API не позволяет фильтровать по произвольным полям. Для этого можно расширить запрос с помощью параметра rest_{$post_type}_query:

function wpplugins_filter_books_by_price($args, $request) {
    if (isset($request['price_min'])) {
        $args['meta_query'][] = array(
            'key'     => 'price',
            'value'   => $request['price_min'],
            'type'    => 'NUMERIC',
            'compare' => '>=',
        );
    }
    if (isset($request['price_max'])) {
        $args['meta_query'][] = array(
            'key'     => 'price',
            'value'   => $request['price_max'],
            'type'    => 'NUMERIC',
            'compare' => '<=',
        );
    }
    return $args;
}
add_filter('rest_books_query', 'wpplugins_filter_books_by_price', 10, 2);

Теперь можно делать запросы типа:

GET https://example.com/wp-json/wp/v2/books?price_min=100&price_max=500

Это позволит создавать удобные фильтры на фронтенде без использования сложных плагинов.

Поддержка и расширение: лучшие практики и полезные плагины

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

  • Clearfy Pro — помогает оптимизировать и обезопасить сайт, в том числе работу с CPT и REST API.
  • ABC Pagination — улучшает пагинацию, что полезно при отображении большого количества записей в REST API.
  • WPRemark — расширяет возможности комментариев, если они нужны для кастомных типов записей.

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

Заключение

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

Если хотите быстро начать, рекомендую ознакомиться с плагином Custom Post Type UI на wpshop.ru — удобный инструмент для работы с CPT без кода.

Создаем собственные виджеты для WordPress: подробное руководство с примерами кода
10.11.2025
Автоматическое удаление старого контента в WordPress
06.02.2026
Как создать автозаполняемое поле в WordPress с примерами кода
03.01.2026
Создаем кастомный тип записей с таксономиями и REST API в WordPress
23.12.2025
Автоматическая отправка отчетов по email в WordPress: практическое руководство
22.01.2026