rest_pre_dispatchхук-фильтрWP 4.4.0

Позволяет переопределить ответ 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 будет работать по дефолту. Может быть возвращены следующие объекты:

Это (возвращенное) значение будет пропущено через функцию rest_ensure_response().

$server(WP_REST_Server)
Экземпляр сервера.
$request(WP_REST_Request)
Текущий запрос к REST API в виде объекта WP_REST_Request.

Примеры

1

#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 Введена.

Где вызывается хук

WP_REST_Server::dispatch()
rest_pre_dispatch
WP_REST_Server::serve_batch_request_v1()
rest_pre_dispatch
wp-includes/rest-api/class-wp-rest-server.php 1016
$result = apply_filters( 'rest_pre_dispatch', null, $this, $request );
wp-includes/rest-api/class-wp-rest-server.php 1767
$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 );