rest_pre_dispatch
Позволяет переопределить ответ REST API. Изменить результат REST запроса до его базовой обработки.
Если фильтр вернет не пустое значение, то оно будет использовано для создания ответа на REST запрос. См. параметр $result.
Использование
add_filter( 'rest_pre_dispatch', 'wp_kama_rest_pre_dispatch_filter', 10, 3 ); /** * Function for `rest_pre_dispatch` filter-hook. * * @param mixed $result Response to replace the requested version with. Can be anything a normal endpoint can return, or null to not hijack the request. * @param WP_REST_Server $server Server instance. * @param WP_REST_Request $request Request used to generate the response. * * @return mixed */ function wp_kama_rest_pre_dispatch_filter( $result, $server, $request ){ // filter... return $result; }
- $result(смешанный)
Ответ на запрос, который заменить дефолтный ответ REST сервера. Если вернуть пустое значение
false|null|0|''
, то ничего не произойдет и REST будет работать по дефолту. Может быть возвращены следующие объекты:- WP_REST_Response
- WP_HTTP_Response
- WP_Error
- Пустота — false null 0 '' []
Это (возвращенное) значение будет пропущено через функцию rest_ensure_response().
- $server(WP_REST_Server)
- Экземпляр сервера.
- $request(WP_REST_Request)
- Текущий запрос к REST API в виде объекта WP_REST_Request.
Примеры
#1 Закроем все WP маршруты REST от публичного доступа
add_filter( 'rest_pre_dispatch', 'close_rest_api_routes', 10, 3 ); /** * Close REST API routes from public access. * * @param WP_REST_Response|WP_Error|null $result * @param WP_REST_Server $rest_server * @param WP_REST_Request $request * * @return WP_REST_Response|WP_HTTP_Response|WP_Error|null */ function close_rest_api_routes( $result, $rest_server, $request ){ // maybe authentication error already set if( ! is_null( $result ) ) return $result; // only for `/wp/v2` namespace if( // only for `/wp/v2` namespace '/wp/v2' === substr( $request->get_route(), 0, 6 ) // Administrator && ! current_user_can( 'manage_options' ) ){ return new WP_Error( 'rest_not_logged_in', 'Your capability is low.', [ 'status' => 401 ] ); } return $result; }
Список изменений
С версии 4.4.0 | Введена. |
Где вызывается хук
rest_pre_dispatch
rest_pre_dispatch
wp-includes/rest-api/class-wp-rest-server.php 984
$result = apply_filters( 'rest_pre_dispatch', null, $this, $request );
wp-includes/rest-api/class-wp-rest-server.php 1698
$result = apply_filters( 'rest_pre_dispatch', null, $this, $clean_request );
Где используется хук в WordPress
wp-includes/rest-api.php 227
add_filter( 'rest_pre_dispatch', 'rest_handle_options_request', 10, 3 );