Работа с REST API в WordPress открывает множество возможностей для создания современных и удобных интерфейсов и приложений. Однако стандартный набор данных, который возвращается для пользователей, часто бывает недостаточным для решения конкретных задач. В этой статье мы подробно разберём, как добавить дополнительное кастомное поле в REST API WordPress для объектов пользователя.
Почему стоит добавлять кастомные поля в REST API WordPress
По умолчанию WordPress REST API предоставляет основные данные пользователя: ID, имя, email и прочее. Но зачастую для фронтенда или внешних сервисов нужны дополнительные данные, например, роль пользователя, дополнительные метаданные, статус в вашей системе или какие-либо настройки.
Добавление своих полей в REST API позволяет:
- Передавать важную для приложения информацию без необходимости дополнительных запросов;
- Упрощать интеграции с внешними сервисами;
- Создавать более гибкие и кастомизированные интерфейсы;
- Избегать создания отдельных API-эндпоинтов для каждой задачи.
Рассмотрим, как это сделать на примере.
Пример: добавление поля "user_rating" для пользователя в REST API
Предположим, у вас есть метаполе user_rating, которое хранит рейтинг пользователя. Нужно сделать так, чтобы это поле выводилось в JSON-ответе REST API при запросе информации о пользователе.
Шаг 1. Создаём функцию для регистрации нового поля
Для этого используем хук rest_api_init и функцию register_rest_field. Ниже пример кода, который добавляет поле user_rating в вывод REST API:
function wpgen_register_user_rating_field() {
register_rest_field(
'user', // Тип объекта — пользователь
'user_rating', // Имя нового поля
array(
'get_callback' => 'wpgen_get_user_rating',
'update_callback' => 'wpgen_update_user_rating',
'schema' => array(
'description' => 'Рейтинг пользователя',
'type' => 'integer',
'context' => array('view', 'edit'),
),
)
);
}
add_action('rest_api_init', 'wpgen_register_user_rating_field');Шаг 2. Создаём функцию получения значения поля
Функция возвращает значение метаполя из базы данных:
function wpgen_get_user_rating($object, $field_name, $request) {
$user_id = $object['id'];
$rating = get_user_meta($user_id, 'user_rating', true);
return $rating ? intval($rating) : 0;
}Шаг 3. Создаём функцию обновления значения поля
Позволяет изменять значение через REST API (например, при вызове метода PUT):
function wpgen_update_user_rating($value, $user, $field_name) {
if (!is_numeric($value)) {
return new WP_Error('rest_invalid_param', 'Рейтинг должен быть числом', array('status' => 400));
}
return update_user_meta($user->ID, $field_name, intval($value));
}Тестирование и использование дополнительного поля в REST API
После добавления кода вы можете проверить работу через любой REST API клиент (Postman, Insomnia) или вызвать из браузера:
https://example.com/wp-json/wp/v2/users/123
В ответе в объекте пользователя появится поле user_rating с числовым значением.
Для обновления можно отправить PUT-запрос на тот же адрес с JSON телом:
{
"user_rating": 5
}Обратите внимание, что обновление будет работать только при наличии соответствующих прав (например, авторизация с правами администратора).
Дополнительные рекомендации по работе с REST API и кастомными полями
Безопасность и права доступа
Очень важно контролировать, кто и что может читать и изменять через REST API. Для этого можно добавить проверку прав в функции обратного вызова. Например, для проверки прав на редактирование пользователя:
function wpgen_update_user_rating($value, $user, $field_name) {
if (!current_user_can('edit_user', $user->ID)) {
return new WP_Error('rest_forbidden', 'Нет прав для изменения рейтинга', array('status' => 403));
}
if (!is_numeric($value)) {
return new WP_Error('rest_invalid_param', 'Рейтинг должен быть числом', array('status' => 400));
}
return update_user_meta($user->ID, $field_name, intval($value));
}Использование плагинов для расширения REST API
Если вы хотите более простое решение без написания кода, можно использовать плагины, например:
- Clearfy Pro — позволяет управлять и расширять REST API через удобный интерфейс;
- WPRemark — для добавления отзывов и дополнительных данных с поддержкой REST API;
Однако для полного контроля и кастомизации лучше писать собственные функции.
Работа с другими типами данных и кастомными типами записей
Принцип добавления полей в REST API схож и для других типов объектов WordPress: постов, таксономий, комментариев. Для каждого типа данных вызывается register_rest_field с соответствующим типом объекта. Это позволяет легко расширять API под любые бизнес-задачи.
Итоги
Добавление своих полей в REST API WordPress — мощный инструмент, позволяющий расширять стандартный функционал и создавать удобные и быстрые интерфейсы. В статье мы рассмотрели полный пример для пользователя, включая получение и обновление данных, а также рекомендации по безопасности и использованию плагинов.