REST API в WordPress — мощный инструмент для взаимодействия с сайтом из внешних систем и для создания сложных клиентских интерфейсов. Однако иногда стандартного набора данных, которые API возвращает для записей, страниц или пользователей, бывает недостаточно. В таких случаях необходимо добавить кастомные поля в REST API, чтобы автоматизировать процессы и получать больше данных напрямую через API.
Почему важно расширять REST API WordPress
По умолчанию WordPress REST API возвращает стандартный набор данных для записей, пользователей и таксономий. Но если вы используете кастомные поля, метаданные или хотите передавать дополнительные данные (например, статус обработки, пользовательские настройки или другую информацию), то без расширения API эти данные будут недоступны.
Добавление новых полей в ответ REST API позволяет:
- Автоматизировать обработку и синхронизацию данных с внешними сервисами.
- Создавать более информативные и адаптированные клиентские приложения и SPA.
- Сократить обращения к базе данных и количество запросов, получая всю нужную информацию сразу.
Расширение REST API — это задача, с которой сталкиваются все разработчики, работающие с кастомными решениями на WordPress.
Как добавить кастомные поля в REST API WordPress
Для добавления своих полей в REST API рекомендуется использовать функцию register_rest_field. Она позволяет добавить новое поле к нужному типу записи или объекту API.
Пример: добавляем метаполе "rating" для записей
function wpcodes_register_rest_field_rating() {
register_rest_field('post', 'rating', [
'get_callback' => 'wpcodes_get_post_rating',
'update_callback' => 'wpcodes_update_post_rating',
'schema' => [
'description' => 'Рейтинг записи',
'type' => 'integer',
'context' => ['view', 'edit']
]
]);
}
add_action('rest_api_init', 'wpcodes_register_rest_field_rating');
function wpcodes_get_post_rating($object, $field_name, $request) {
return (int) get_post_meta($object['id'], 'rating', true);
}
function wpcodes_update_post_rating($value, $object, $field_name) {
if (!is_numeric($value)) {
return new WP_Error('rest_invalid_param', 'Рейтинг должен быть числом', ['status' => 400]);
}
update_post_meta($object->ID, 'rating', intval($value));
return true;
}В этом примере мы добавляем поле rating для записей. Оно доступно при получении данных через REST API, а также может обновляться с помощью запросов PUT/PATCH.
Использование плагинов для упрощения расширения REST API
Если хочется не писать код вручную, можно использовать плагины, которые расширяют функционал REST API и позволяют работать с кастомными полями проще. Например:
- Clearfy Pro — плагин для оптимизации и управления настройками сайта, в том числе расширяет возможности API.
- WPRemark — плагин для управления комментариями и отзывами, может добавлять свои поля в API.
Используя такие решения, можно быстрее настроить отдачу нужных данных через REST API без глубокого погружения в код.
Расширение REST API для кастомных типов записей и таксономий
Если вы используете кастомные типы записей (CPT), то для них также можно добавлять поля через register_rest_field. Аналогично работает и для таксономий — можно расширять ответ API, добавляя дополнительные поля к терминам.
Пример: добавление поля "icon" для таксономии "product_cat"
function wpcodes_register_rest_field_product_cat_icon() {
register_rest_field('product_cat', 'icon', [
'get_callback' => function($term) {
return get_term_meta($term['id'], 'icon', true);
},
'update_callback' => function($value, $term) {
if (!is_string($value)) {
return new WP_Error('rest_invalid_param', 'Иконка должна быть строкой', ['status' => 400]);
}
update_term_meta($term->term_id, 'icon', sanitize_text_field($value));
return true;
},
'schema' => [
'description' => 'Иконка категории продукта',
'type' => 'string',
'context' => ['view', 'edit']
]
]);
}
add_action('rest_api_init', 'wpcodes_register_rest_field_product_cat_icon');Это позволяет в API получать и обновлять поле иконки категории, что полезно для фронтенд-приложений и мобильных приложений.
Советы по безопасности и производительности при расширении REST API
Добавляя поля в REST API, важно учитывать безопасность. Если ваши поля содержат чувствительные данные, убедитесь, что они доступны только авторизованным пользователям, установив соответствующие проверки в коллбеках.
Например, внутри get_callback можно проверить права пользователя через current_user_can и возвращать данные только при наличии прав.
Также учитывайте производительность: если для получения данных требуется сложный SQL-запрос или внешний API, кешируйте результаты, чтобы не перегружать сервер при каждом запросе API.
Итоги и рекомендации
Расширение REST API WordPress — важный шаг для создания современных сайтов и приложений на WordPress. Добавляя кастомные поля, вы получаете гибкость и возможность автоматизации, экономя время на обработке данных.
Используйте функцию register_rest_field для добавления полей, продумывайте безопасность и кеширование, а при необходимости применяйте плагины из каталога WPShop для ускорения разработки.