Иногда стандартные данные, которые возвращает REST API WordPress, не покрывают все потребности разработчика. Если вы создаёте фронтенд-приложение или мобильное приложение на React, Vue или другом фреймворке, часто требуется расширить API дополнительными пользовательскими полями (custom fields) из метаданных постов или пользовательскими данными.
Почему важно расширять REST API пользовательскими полями
По умолчанию WP REST API возвращает базовые данные поста, такие как заголовок, содержимое, дата и прочее. Но если вы используете Advanced Custom Fields (ACF) или добавляете метаполя вручную, эти данные не попадут в ответ API без дополнительной настройки. Добавление пользовательских полей в REST API позволяет упростить работу фронтенда, избавляя от необходимости делать дополнительные запросы к сайту или базе данных.
Добавление пользовательских полей с помощью register_rest_field
Самый удобный способ расширить REST API — использовать функцию register_rest_field. Она позволяет добавить произвольное поле к любому типу записи, возвращаемому API.
Пример: добавляем метаполе "_wpstuff_rating" к записи типа "post"
function wpstuff_register_rating_field() {
register_rest_field('post', 'wpstuff_rating', [
'get_callback' => 'wpstuff_get_post_rating',
'update_callback' => 'wpstuff_update_post_rating',
'schema' => [
'description' => 'Рейтинг записи',
'type' => 'integer',
'context' => ['view', 'edit'],
],
]);
}
add_action('rest_api_init', 'wpstuff_register_rating_field');
function wpstuff_get_post_rating($object, $field_name, $request) {
return (int) get_post_meta($object['id'], '_wpstuff_rating', true);
}
function wpstuff_update_post_rating($value, $object, $field_name) {
if (!is_numeric($value)) {
return new WP_Error('rest_invalid_param', 'Рейтинг должен быть числом', ['status' => 400]);
}
return update_post_meta($object->ID, '_wpstuff_rating', intval($value));
}
Этот код добавляет поле wpstuff_rating в JSON ответ REST API при запросе поста, а также позволяет обновлять его через PUT/PATCH запросы.
Использование плагина Advanced Custom Fields (ACF) для интеграции с REST API
Если вы используете плагин ACF для создания кастомных полей, то существует удобное решение для отображения этих полей в REST API — плагин ACF to REST API.
Он автоматически добавляет все поля ACF в ответ API без дополнительного кода. Для активации достаточно установить и включить плагин. Если нужны фильтры и кастомизация, можно использовать хуки, которые предоставляет ACF.
Пример ручного добавления ACF поля с помощью кода
function wpstuff_register_acf_field() {
register_rest_field('post', 'wpstuff_acf_custom', [
'get_callback' => function($object) {
return get_field('custom_field_name', $object['id']);
},
'schema' => null,
]);
}
add_action('rest_api_init', 'wpstuff_register_acf_field');
Замените custom_field_name на имя вашего поля ACF. Такой подход даёт гибкость, если не хотите использовать дополнительный плагин.
Как проверить, что пользовательское поле добавлено в REST API
- Отправьте GET запрос к API, например
https://your-site.ru/wp-json/wp/v2/posts/123, где 123 — ID поста. - В ответе JSON найдите добавленное поле, например
wpstuff_rating. - Для изменения данных используйте PUT или PATCH запрос с JSON телом, например:
{
"wpstuff_rating": 5
}
Убедитесь, что у пользователя, под которым вы делаете запрос, есть права на редактирование записи.
Практические советы по безопасности и производительности
При расширении REST API пользовательскими полями важно учитывать:
- Проверяйте права доступа (capabilities) перед возвратом или обновлением данных.
- Если поля содержат чувствительную информацию, не выводите их для неавторизованных пользователей.
- Кешируйте результаты, если поля требуют затратных запросов к базе.
- Минимизируйте размер возвращаемых данных — не добавляйте слишком много полей без необходимости.
Заключение
Добавление пользовательских полей в WP REST API — важный шаг для создания современных и гибких приложений на WordPress. Используйте register_rest_field для кастомных решений или плагин ACF to REST API для быстрого интегрирования ACF полей. Внимательно контролируйте безопасность и права доступа, чтобы не раскрыть лишнюю информацию.
Если хотите автоматизировать работу с REST API и кастомными полями, рекомендуем обратить внимание на плагин ACF to REST API на WPSHOP — удобный инструмент для расширения API без лишнего кода.