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

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

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

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

Если фильтр вернет не пустое значение, то оно будет использовано для создания ответа на 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 952
$result = apply_filters( 'rest_pre_dispatch', null, $this, $request );
wp-includes/rest-api/class-wp-rest-server.php 1603
$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 );
Комментариев нет
    Войти