WP REST API: как обновлять метаполя записи через кастомный эндпоинт
В стандартном REST API WordPress отсутствует удобный способ обновить метаполя (post meta) записи напрямую через API. Это часто вызывает сложности, когда необходимо программно изменять дополнительные данные записи без использования административной панели.
Почему важно обновлять метаполя через REST API
Метаполя позволяют расширять функциональность записей, добавляя произвольные данные, которые не входят в стандартный набор полей. Например, вы можете хранить дополнительную информацию о продукте, настройках или пользовательских свойствах.
Обновление метаполей через REST API открывает широкие возможности для интеграций с внешними системами, мобильными приложениями или кастомными фронтендами на React, Vue и других.
Но чтобы сделать это правильно, нужно создать собственный эндпоинт, который будет обрабатывать запросы на обновление метаданных с проверкой прав и валидацией данных.
Создание кастомного REST API эндпоинта для обновления метаполей
Рассмотрим пример, как в wpapi-стиле (с префиксами функций) создать REST API маршрут, который позволит обновлять метаданные записи по ID.
Основные шаги:
- Регистрируем маршрут с методом POST или PATCH для обновления данных;
- Пишем коллбек-функцию для обработки запроса, которая получает ID записи и данные метаполей из тела запроса;
- Проверяем права пользователя на редактирование записи;
- Обновляем метаполя через
update_post_meta; - Возвращаем ответ с результатом операции.
Код регистрации эндпоинта
add_action('rest_api_init', function() {
register_rest_route('wpapi/v1', '/post-meta/(?P<id>\d+)', [
'methods' => 'POST',
'callback' => 'wpapi_update_post_meta',
'permission_callback' => function(WP_REST_Request $request) {
$post_id = (int) $request->get_param('id');
return current_user_can('edit_post', $post_id);
},
'args' => [
'id' => [
'required' => true,
'validate_callback' => 'is_numeric',
],
],
]);
});Код функции обновления метаполей
function wpapi_update_post_meta(WP_REST_Request $request) {
$post_id = (int) $request->get_param('id');
$meta = $request->get_json_params();
if (empty($meta) || !is_array($meta)) {
return new WP_Error('invalid_data', 'Данные метаполей должны быть переданы в формате JSON объекта', ['status' => 400]);
}
foreach ($meta as $key => $value) {
// Здесь можно добавить дополнительную валидацию ключей и значений
update_post_meta($post_id, sanitize_key($key), sanitize_text_field($value));
}
return [
'success' => true,
'message' => 'Метаполя успешно обновлены',
'post_id' => $post_id,
'updated_meta' => $meta,
];
}Безопасность и валидация данных
Особое внимание уделите проверке прав пользователя. В примере используется current_user_can('edit_post', $post_id), чтобы убедиться, что пользователь имеет право редактировать указанную запись.
Также рекомендуем тщательно валидировать и фильтровать входящие данные. В примере мы используем sanitize_key для ключей и sanitize_text_field для значений. В зависимости от типа метаданных можно применять и другие функции очистки.
Если ваши метаполя хранят сложные данные (массивы, объекты), можно сериализовать их или использовать maybe_serialize при сохранении и maybe_unserialize при чтении.
Пример запроса к кастомному эндпоинту
Для обновления метаполей записи с ID 123 делаем POST-запрос на URL:
https://ваш-сайт.ru/wp-json/wpapi/v1/post-meta/123
Тело запроса (Content-Type: application/json):
{
"custom_field_1": "Новое значение",
"custom_field_2": "Еще одно значение"
}Ответ будет содержать подтверждение успешного обновления.
Полезные плагины для работы с REST API и метаполями
Если вы хотите упростить интеграцию и реализацию REST API, обратите внимание на следующие плагины:
- Clearfy Pro — оптимизация и расширение REST API, включая удобные фильтры и возможности кастомизации;
- WPRemark — для работы с комментариями и метаданными через REST API;
- WPGPT — интеграция с GPT-моделями для генерации и обработки данных через API.
Итоги и рекомендации
Создание собственного REST API эндпоинта для обновления метаполей записи — задача, которая часто требуется при разработке сложных проектов на WordPress. Такой подход позволяет гибко управлять данными и интегрироваться с внешними системами.
Обязательно учитывайте безопасность, проверяйте права и валидируйте данные. Используйте стандартные функции WordPress для работы с метаполями и фильтрации данных.
Если нужен быстрый старт и расширенные возможности, рассмотрите использование готовых плагинов с поддержкой REST API от WPSHOP.