WordPress с версии 4.7 предоставляет мощный REST API, который позволяет работать с данными сайта через HTTP-запросы. Однако стандартный REST API не всегда покрывает все потребности, особенно когда речь идет о кастомных полях и метаданных, которые вы добавляете к постам, страницам или пользовательским типам записей. В этой статье мы подробно разберем, как расширить REST API, чтобы включить в его ответы собственные поля и метаданные.
Почему нужно добавлять кастомные поля в REST API WordPress
Стандартный REST API возвращает только базовые данные объектов (постов, пользователей, таксономий и т.д.). Но в реальных проектах часто используются дополнительные данные — кастомные поля, которые расширяют функциональность сайта. Без их включения в REST API вы не сможете получить или обновить эти данные через внешние приложения или JavaScript-фреймворки (React, Vue и др.).
Добавление собственных полей в REST API особенно актуально для headless WordPress, мобильных приложений или сложных интерфейсов на фронтенде.
Рассмотрим, как это сделать на примере добавления кастомного поля к типу записи «post».
Регистрация своих полей в REST API через register_rest_field
Самый простой и рекомендуемый способ добавить новое поле — использовать функцию register_rest_field. Она позволяет добавить поле к любому объекту REST API и указать, как получать и устанавливать его значение.
Пример добавления поля wpmeta_custom_text к объекту «post»:
function wpmeta_register_custom_field() {
register_rest_field(
'post', // Тип объекта, к которому добавляем поле
'wpmeta_custom_text', // Имя нового поля
array(
'get_callback' => 'wpmeta_get_custom_text',
'update_callback' => 'wpmeta_update_custom_text',
'schema' => array(
'description' => 'Пользовательское поле с текстом',
'type' => 'string',
'context' => array('view', 'edit'),
),
)
);
}
add_action('rest_api_init', 'wpmeta_register_custom_field');
function wpmeta_get_custom_text($object) {
return get_post_meta($object['id'], 'wpmeta_custom_text', true);
}
function wpmeta_update_custom_text($value, $object, $field_name) {
if (!is_string($value)) {
return new WP_Error('rest_invalid_param', 'Значение должно быть строкой', array('status' => 400));
}
return update_post_meta($object->ID, $field_name, sanitize_text_field($value));
}Объяснение кода:
- В
register_rest_fieldуказываем тип объекта — здесь это посты. get_callback— функция, которая возвращает значение поля. В нашем случае получаем мета-данные из БД.update_callback— функция для обновления значения поля через REST API.schemaописывает тип и контекст поля, что помогает клиентам API правильно его использовать.
Тестирование нового поля в REST API
После добавления кода вы можете проверить работу через браузер или инструменты типа Postman. Запрос по ссылке:
https://ваш-сайт.ru/wp-json/wp/v2/posts/ИД_поста
В ответе JSON должно появиться новое поле wpmeta_custom_text с вашим значением.
Для обновления можно отправить PATCH запрос с телом:
{
"wpmeta_custom_text": "Новое значение"
}Если все сделано правильно, поле обновится в базе.
Добавление кастомных полей для пользовательских типов записей
Если вы работаете с кастомными типами записей, процесс аналогичный. Просто укажите в register_rest_field ваш тип. Например, для типа product:
register_rest_field('product', 'wpmeta_price', array(
'get_callback' => 'wpmeta_get_price',
'update_callback' => 'wpmeta_update_price',
'schema' => array(
'description' => 'Цена продукта',
'type' => 'number',
'context' => array('view', 'edit')
),
));
function wpmeta_get_price($object) {
return floatval(get_post_meta($object['id'], 'wpmeta_price', true));
}
function wpmeta_update_price($value, $object, $field_name) {
if (!is_numeric($value)) {
return new WP_Error('rest_invalid_param', 'Цена должна быть числом', array('status' => 400));
}
return update_post_meta($object->ID, $field_name, floatval($value));
}Таким образом, вы расширяете REST API и делаете его удобным для вашего проекта.
Использование плагина Clearfy Pro для управления REST API
Если вы хотите управлять доступом к REST API и фильтровать данные без написания кода, обратите внимание на плагин Clearfy Pro. Он позволяет оптимизировать REST API, отключать нежелательные эндпоинты и настраивать доступ к данным для повышения безопасности.
Это особенно полезно, если вы хотите ограничить видимость определенных пользовательских полей.
Советы и рекомендации по безопасности и производительности
Добавляя кастомные поля в REST API, следуйте нескольким рекомендациям:
- Валидация и санитизация данных при обновлении — обязательно проверяйте тип и содержимое получаемых данных.
- Используйте
update_callbackдля контроля записи, чтобы не допустить записи некорректных данных. - Не раскрывайте чувствительные данные — фильтруйте поля, которые не должны попадать в ответ API.
- Кешируйте результаты при больших нагрузках, чтобы снизить количество запросов к базе.
Соблюдение этих правил обеспечит стабильную и безопасную работу вашего REST API.
Заключение
Добавление собственных полей в REST API WordPress — обязательный шаг для создания современных, динамичных сайтов и приложений с использованием WordPress как backend. Используйте функции register_rest_field и продуманно управляйте данными, чтобы обеспечить удобство и безопасность.
Если хотите подробные решения для оптимизации и управления REST API, рекомендуем изучить Clearfy Pro, который поможет легко настроить API без лишних усилий.