WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Платформа для конвертации и монетизации трафика

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

Позволяет переопределить ответ REST API. Изменить результат REST запроса до его базовой обработки.

Если фильтр вернет не пустое значение, то оно будет использовано для создания ответа на REST запрос. См. параметр $result.

Использование

add_filter( 'rest_pre_dispatch', 'filter_function_name_5911', 10, 3 );
function filter_function_name_5911( $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 Закроем все 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 972
$result = apply_filters( 'rest_pre_dispatch', null, $this, $request );
wp-includes/rest-api/class-wp-rest-server.php 1567
$result = apply_filters( 'rest_pre_dispatch', null, $this, $clean_request );

Где используется хук в ядре WordPress

wp-includes/rest-api.php 211
add_filter( 'rest_pre_dispatch', 'rest_handle_options_request', 10, 3 );
Комментариев нет
    Войти