WordPress REST API — мощный инструмент для работы с данными сайта. Однако стандартный API не всегда возвращает все необходимые данные, особенно когда речь идет о мета полях пользователей. В этой статье мы подробно разберем, как расширить WPONE REST API для получения произвольных полей (мета) пользователей, а также приведем примеры кода для реализации этой задачи.
Что такое WPONE REST API и зачем его расширять
WPONE REST API — это кастомная надстройка над стандартным REST API WordPress, которая позволяет создавать удобные и безопасные интерфейсы для работы с данными сайта. Часто в проектах возникает необходимость получить не только основные поля пользователя (имя, email), но и дополнительные мета данные, например, телефон, адрес, настройки профиля.
По умолчанию WordPress REST API не возвращает мета поля пользователей, так как это может быть рискованно с точки зрения безопасности и производительности. Поэтому нам нужно самостоятельно расширить API, чтобы он возвращал нужные данные.
В этой статье мы используем префикс функций wpone_ для удобства и чтобы избежать конфликтов с другими плагинами.
Добавление мета полей пользователя в ответ WPONE REST API
Для начала зарегистрируем дополнительное поле в REST API, чтобы оно возвращалось вместе с данными пользователя. Для этого используем хук rest_api_init и функцию register_rest_field.
add_action('rest_api_init', 'wpone_register_user_meta');
function wpone_register_user_meta() {
register_rest_field('user', 'phone', [
'get_callback' => 'wpone_get_user_phone',
'update_callback' => null,
'schema' => [
'description' => 'Номер телефона пользователя',
'type' => 'string',
'context' => ['view', 'edit']
]
]);
}
function wpone_get_user_phone($user) {
return get_user_meta($user['id'], 'phone', true);
}Здесь мы добавили поле phone, которое возвращает мета данные с ключом phone из профиля пользователя. Таким образом, при запросе /wp-json/wp/v2/users/{id} будет возвращаться также и номер телефона.
Расширение для нескольких мета полей
Если нужно добавить сразу несколько полей, можно оформить это удобнее:
add_action('rest_api_init', 'wpone_register_multiple_user_meta');
function wpone_register_multiple_user_meta() {
$meta_keys = ['phone', 'address', 'company'];
foreach ($meta_keys as $key) {
register_rest_field('user', $key, [
'get_callback' => function($user) use ($key) {
return get_user_meta($user['id'], $key, true);
},
'update_callback' => null,
'schema' => [
'description' => "Мета поле $key пользователя",
'type' => 'string',
'context' => ['view', 'edit']
]
]);
}
}Так вы быстро добавите нужные поля без дублирования кода.
Обработка запросов и безопасность данных
Важно контролировать, кто и какие данные может получить через REST API. Если вы возвращаете личные данные, стоит ограничить доступ только авторизованным пользователям или администраторам.
Для этого в register_rest_field добавьте проверку прав в параметр get_callback:
function wpone_get_user_phone_secure($user) {
if (!current_user_can('list_users')) {
return null; // или можно вернуть ошибку
}
return get_user_meta($user['id'], 'phone', true);
}И замените в регистрации поля 'get_callback' => 'wpone_get_user_phone_secure'. Так вы гарантируете, что данные не попадут в руки посторонних.
Пример запроса и разбор результата
После расширения API вы можете получить данные пользователя с помощью запроса:
GET https://example.com/wp-json/wp/v2/users/2Ответ будет содержать стандартные поля и дополнительно ваше мета поле phone:
{
"id": 2,
"name": "Ivan Petrov",
"email": "ivan@example.com",
"phone": "+7 999 123-45-67"
}Это удобно для фронтенд-приложений, мобильных клиентов или админ-панелей, которым нужно расширенное представление пользователя.
Использование плагинов WPShop для удобства работы с REST API
Если вы хотите упростить работу с мета полями и REST API, рекомендуем обратить внимание на плагин Clearfy Pro. Он позволяет удобно управлять мета полями, оптимизировать API и повышать безопасность.
Еще один полезный инструмент — WPRemark, который помогает создавать динамические комментарии и отзывы с использованием расширенного API.
Расширение WPONE REST API для записи мета полей пользователя
Если нужно не только получать, но и изменять мета данные через API, добавьте параметр update_callback:
register_rest_field('user', 'phone', [
'get_callback' => 'wpone_get_user_phone_secure',
'update_callback' => 'wpone_update_user_phone',
'schema' => [
'description' => 'Номер телефона пользователя',
'type' => 'string',
'context' => ['view', 'edit']
]
]);
function wpone_update_user_phone($value, $user, $field_name) {
if (!current_user_can('edit_user', $user->ID)) {
return new WP_Error('rest_forbidden', esc_html__('Недостаточно прав для изменения телефона пользователя.'), ['status' => 403]);
}
if (!is_string($value)) {
return new WP_Error('rest_invalid_param', esc_html__('Неверный формат телефона.'), ['status' => 400]);
}
return update_user_meta($user->ID, $field_name, sanitize_text_field($value));
}Теперь при отправке PATCH или PUT запроса на /wp-json/wp/v2/users/{id} с параметром phone вы сможете обновлять это значение.
Заключение по теме расширения WPONE REST API
Расширение WPONE REST API — важный навык для разработчика WordPress, который позволяет создать удобный интерфейс для получения и изменения пользовательских данных и мета полей. При правильной реализации вы обеспечите безопасность, гибкость и простоту интеграции с внешними приложениями.
Используйте примеры кода из статьи, чтобы быстро внедрить нужный функционал, а для удобства и безопасности рассмотрите возможность использования плагинов из WPShop.