WordPress REST API — мощный инструмент для взаимодействия с сайтом через HTTP-запросы. По умолчанию, стандартные типы записей, такие как posts и pages, поддерживают REST API. Однако если вы создаёте собственные типы записей (Custom Post Types, CPT), нужно явно включить поддержку REST API, чтобы работать с ними через API.
Почему важно добавлять REST API поддержку в собственные типы записей
REST API открывает большие возможности для интеграции, мобильных приложений, SPA (Single Page Application) и других внешних систем. Без включения поддержки REST API для CPT вы не сможете получить, создавать, обновлять или удалять записи вашего типа через API. Это ограничивает гибкость и автоматизацию.
Включение REST API позволяет использовать стандартные эндпоинты, например /wp-json/wp/v2/{post_type}, для взаимодействия с вашим CPT.
Как добавить поддержку REST API при регистрации CPT
Самый простой и правильный способ — при регистрации собственного типа записи указать параметр show_in_rest равным true. В качестве примера рассмотрим функцию wpnotes_register_cpt_books, которая регистрирует тип записи «Книги» с поддержкой REST API.
function wpnotes_register_cpt_books() {
$args = array(
'label' => 'Книги',
'public' => true,
'show_in_rest' => true, // Включаем REST API
'rest_base' => 'books', // Базовый endpoint
'rest_controller_class'=> 'WP_REST_Posts_Controller',
'supports' => array('title', 'editor', 'thumbnail'),
);
register_post_type('book', $args);
}
add_action('init', 'wpnotes_register_cpt_books');Здесь параметр show_in_rest отвечает за включение REST API, а rest_base задаёт URL-часть для доступа к API. По умолчанию, если не указать rest_base, он будет совпадать с именем типа записи.
Расширение REST API: добавление пользовательских полей и метаданных
Часто стандартных полей недостаточно, и нужно вернуть через API дополнительные метаданные. Для этого регистрируем мета-поля с поддержкой REST API или добавляем кастомные поля через хук rest_api_init.
Рассмотрим пример регистрации мета-поля author_name для типа записи book с REST поддержкой:
function wpnotes_register_book_meta() {
register_post_meta('book', 'author_name', array(
'show_in_rest' => true,
'single' => true,
'type' => 'string',
'description' => 'Имя автора книги',
'auth_callback' => function() {
return current_user_can('edit_posts');
},
));
}
add_action('init', 'wpnotes_register_book_meta');После этого поле author_name будет доступно в JSON-ответе при запросах к REST API, а также его можно будет изменять с помощью PUT/PATCH-запросов.
Добавление кастомных полей через фильтр REST API
Для более сложной логики можно воспользоваться register_rest_field. Например, добавим поле book_summary, которое будет вычисляться динамически:
function wpnotes_register_rest_field_book_summary() {
register_rest_field('book', 'book_summary', array(
'get_callback' => function($object) {
$content = $object['content']['rendered'];
return wp_trim_words(strip_tags($content), 20);
},
'schema' => array(
'description' => 'Краткое содержание книги',
'type' => 'string',
'context' => array('view', 'edit'),
),
));
}
add_action('rest_api_init', 'wpnotes_register_rest_field_book_summary');Пример запроса и ответа REST API для CPT с мета-полями
После настройки API можно получить список книг с помощью запроса:
GET https://your-site.ru/wp-json/wp/v2/booksОтвет будет включать стандартные поля и дополнительные, например:
[
{
"id": 123,
"date": "2024-06-01T12:00:00",
"title": {"rendered": "Моя Книга"},
"author_name": "Иван Иванов",
"book_summary": "Краткое содержание книги..."
},
...
]Полезные плагины для работы с REST API и CPT
Если не хочется писать код вручную, можно использовать плагины:
- Clearfy Pro — позволяет управлять показом типов записей в REST API, оптимизировать настройки и безопасность.
- WPRemark — помогает создавать динамические формы и работать с REST API без сложного кода.
Отладка и тестирование REST API для CPT
Для тестирования запросов удобно использовать такие инструменты как Postman, Insomnia или встроенный REST API клиент браузера. Важно проверить права доступа: REST API по умолчанию требует авторизации для создания, обновления и удаления данных.
Для публичного доступа можно настроить права доступа через auth_callback в register_post_meta или фильтры REST API.
Обработка ошибок и безопасность
Обязательно проверяйте права пользователя при работе с REST API. Без этого злоумышленники смогут изменять ваши данные. Используйте nonce, capability checks, и ограничивайте доступ к чувствительным данным.