rest_pre_echo_response
Позволяет изменить данные ответа REST API перед отправкой ответа клиенту.
Этот фильтр срабатывает в самом конце обработки REST-запроса. Дает возможность изменить финальный массив данных перед его сериализацией в JSON и отправкой клиенту.
Полезен для добавления, удаления или изменения полей ответа, а также для внедрения логики фильтрации или кэширования.
Это последний шанс изменить данные перед отправкой клиенту.
Хук вызывается в методе WP_REST_Server::serve_request() после подготовки данных ответа и перед их выводом.
Использование
add_filter( 'rest_pre_echo_response', 'wp_kama_rest_pre_echo_response_filter', 10, 3 );
/**
* Function for `rest_pre_echo_response` filter-hook.
*
* @param array $result Response data to send to the client.
* @param WP_REST_Server $server Server instance.
* @param WP_REST_Request $request Request used to generate the response.
*
* @return array
*/
function wp_kama_rest_pre_echo_response_filter( $result, $server, $request ){
// filter...
return $result;
}
- $result(array)
- Массив данных ответа, который будет сериализован и отправлен клиенту.
- $server(WP_REST_Server)
- Экземпляр сервера REST API, обрабатывающий запрос.
- $request(WP_REST_Request)
- Объект запроса, использованный для генерации ответа.
Примеры
#1 Добавление пользовательского сообщения в ответ
Добавим дополнительное поле "custom_message" в данные ответа.
add_filter( 'rest_pre_echo_response', function( $result, $server, $request ) {
$result['custom_message'] = 'Данные были успешно обработаны.';
return $result;
}, 10, 3 ); #2 Обработка ошибок в ответе
Преобразуем объект ошибки в структурированный массив с кодом и сообщением.
add_filter( 'rest_pre_echo_response', function( $result, $server, $request ) {
if ( is_wp_error( $result ) ) {
return [
'error' => true,
'code' => $result->get_error_code(),
'message' => $result->get_error_message(),
];
}
return $result;
}, 10, 3 ); #3 Кэширование ответа REST API
Сохраним данные ответа в кэше для последующего использования.
add_filter( 'rest_pre_echo_response', function( $result, $server, $request ) {
$cache_key = 'rest_response_' . md5( $request->get_route() . serialize( $request->get_params() ) );
set_transient( $cache_key, $result, HOUR_IN_SECONDS );
return $result;
}, 10, 3 );
Список изменений
| С версии 4.8.1 | Введена. |
Где вызывается хук
$result = apply_filters( 'rest_pre_echo_response', $result, $this, $request );