WordPress REST API — мощный инструмент для создания современных веб-приложений на базе WordPress. Однако, по умолчанию в ответах API отсутствуют кастомные поля, которые часто необходимы для полноценной работы фронтенда или мобильного приложения. В этой статье мы подробно разберём, как добавить своё кастомное поле в REST API WordPress, чтобы получить доступ к дополнительным данным.
Почему кастомные поля не отображаются в REST API по умолчанию
Кастомные поля (custom fields) в WordPress хранятся в мета-данных поста. Они не включены в стандартный ответ REST API, так как это может привести к избыточности данных и потенциальным проблемам с безопасностью. Чтобы получить доступ к ним через API, их необходимо явно регистрировать.
Для безопасного и корректного добавления мета-данных в REST API используется функция register_meta() с параметром 'show_in_rest' => true. Это позволяет указать, какие поля должны быть доступны и как они должны обрабатываться.
Давайте рассмотрим, как это сделать на практике.
Регистрация кастомного поля для REST API на примере поля "wptavern_custom_field"
Предположим, у нас есть кастомное поле с ключом _wptavern_custom_field. Чтобы оно появилось в REST API, нужно зарегистрировать его следующим образом:
add_action('rest_api_init', 'wptavern_register_custom_field');
function wptavern_register_custom_field() {
register_post_meta('post', '_wptavern_custom_field', [
'show_in_rest' => true,
'single' => true,
'type' => 'string',
'auth_callback' => function() {
return current_user_can('edit_posts');
}
]);
}Здесь мы вызываем register_post_meta для типа записи post. Параметр show_in_rest позволяет включить поле в REST API. single => true означает, что поле хранит одно значение. auth_callback защищает поле, показывая его только авторизованным пользователям с правом редактирования постов.
После добавления этого кода и обновления страницы REST API, например /wp-json/wp/v2/posts, вы увидите поле _wptavern_custom_field в ответе.
Как получить и обновить кастомное поле через REST API
Значения кастомных полей можно обновлять через REST API, отправляя запросы POST или PATCH с полем в теле запроса:
{
"_wptavern_custom_field": "Новое значение"
}Важно, чтобы пользователь имел соответствующие права для изменения.
Добавление нескольких кастомных полей и использование в кастомных типах записей
Если у вас несколько кастомных полей, регистрируйте каждое отдельно с аналогичным подходом. Для кастомных типов записей замените 'post' на ваш тип записи, например 'wptavern_product'.
Пример регистрации двух полей для типа записи product:
add_action('rest_api_init', 'wptavern_register_product_meta');
function wptavern_register_product_meta() {
register_post_meta('product', 'wptavern_price', [
'show_in_rest' => true,
'single' => true,
'type' => 'number',
]);
register_post_meta('product', 'wptavern_color', [
'show_in_rest' => true,
'single' => true,
'type' => 'string',
]);
}Это позволит получать и обновлять свойства продукта через API.
Использование плагинов для расширения возможностей REST API
Если вы не хотите писать код, есть плагины, которые облегчают работу с REST API и мета-данными:
- ACF to REST API — расширяет REST API данными из Advanced Custom Fields (ACF).
- WP REST API Controller — позволяет управлять видимостью полей в REST API через админку.
Однако, собственная регистрация мета-полей через код даёт больше контроля и безопасности.
Выводы и рекомендации по работе с кастомными полями в REST API
Подключение кастомных полей в REST API — важный шаг для создания гибких и функциональных приложений на WordPress. Основные рекомендации:
- Всегда регистрируйте мета-поля с
show_in_restи продумывайте права доступа черезauth_callback. - Используйте типы данных для правильной сериализации и валидации.
- Для сложных структур используйте сериализацию JSON, но учитывайте производительность.
- Тестируйте API с помощью инструментов Postman или встроенного REST API браузера WordPress.
Таким образом, добавляя кастомные поля в REST API, вы расширяете возможности взаимодействия с WordPress и делаете ваш сайт более современным и удобным для разработки.