rest_post_dispatch
Позволяет изменить ответ REST API после выполнения обработчика маршрута, но до отправки ответа клиенту.
Через фильтр можно изменить данные, HTTP-статус и заголовки ответа.
Фильтр также применяется к внутренним запросам для предварительной загрузки данных, встроенным ресурсам _embed и отдельным запросам внутри /batch/v1.
Фильтр может вызываться несколько раз в рамках одного HTTP-запроса. Проверяйте маршрут и метод запроса перед изменением ответа.
Для добавления постоянного поля к объектам REST API используйте register_rest_field(). Функция добавляет поле в схему объекта и корректно работает с параметром _fields.
Использование
add_filter( 'rest_post_dispatch', 'wp_kama_rest_post_dispatch_filter', 10, 3 );
/**
* Function for `rest_post_dispatch` filter-hook.
*
* @param WP_HTTP_Response $result Result to send to the client. Usually a `WP_REST_Response`.
* @param WP_REST_Server $server Server instance.
* @param WP_REST_Request $request Request used to generate the response.
*
* @return WP_HTTP_Response
*/
function wp_kama_rest_post_dispatch_filter( $result, $server, $request ){
// filter...
return $result;
}
- $result(WP_HTTP_Response)
- Ответ, который будет отправлен клиенту. Обычно объект WP_REST_Response{}.
- $server(WP_REST_Server)
- Текущий экземпляр REST-сервера.
- $request(WP_REST_Request)
- Запрос, для которого сформирован ответ. Позволяет получить маршрут, HTTP-метод и параметры запроса.
Примеры
#1 Добавление данных в ответ пользовательского маршрута
Добавим время формирования ответа маршрута /my-plugin/v1/status.
add_filter( 'rest_post_dispatch', 'wp_kama_add_generated_time', 10, 3 );
function wp_kama_add_generated_time( $result, $server, $request ) {
if (
'/my-plugin/v1/status' !== $request->get_route()
|| 'GET' !== $request->get_method()
) {
return $result;
}
$data = $result->get_data();
if ( is_array( $data ) ) {
$data['generated_at'] = gmdate( 'c' );
$result->set_data( $data );
}
return $result;
}Список изменений
| С версии 4.4.0 | Введена. |
| С версии 4.5.0 | Applied to embedded responses. |
Где вызывается хук
rest_post_dispatch
rest_post_dispatch
rest_post_dispatch
rest_post_dispatch
wp-includes/rest-api/class-wp-rest-server.php 464
$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $request );
wp-includes/rest-api.php 3033
$response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $server, $request );
wp-includes/rest-api/class-wp-rest-server.php 824
$response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $this, $request );
wp-includes/rest-api/class-wp-rest-server.php 1894
$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $single_request );
Где используется хук в WordPress
wp-includes/connectors.php 753
add_filter( 'rest_post_dispatch', '_wp_connectors_rest_settings_dispatch', 10, 3 );
wp-includes/rest-api.php 253
add_filter( 'rest_post_dispatch', 'rest_send_allow_header', 10, 3 );
wp-includes/rest-api.php 254
add_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10, 3 );