pre_http_requestхук-фильтрWP 2.9.0

Позволяет оборвать выполнение HTTP запроса и вернуть указанное значение.

Если фильтр вернет НЕ false, то HTTP запрос будет прерван и вернет то что указано вместо false.

Фильтр должен возвращать одно из:

  • array - массив с ключами: headers, body, response, cookies и filename. Смотрите WP_HTTP_Requests_Response::to_array().

  • WP_Error - экземпляр класса WP_Error{}.

  • false - по дефолту. Не прерывать запрос и обработать его как задумано по дефолту.

Возвращение любого другого значения может привести к неожиданному поведению.

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

add_filter( 'pre_http_request', 'wp_kama_pre_http_request_filter', 10, 3 );

/**
 * Function for `pre_http_request` filter-hook.
 * 
 * @param false|array|WP_Error $response    A preemptive return value of an HTTP request.
 * @param array                $parsed_args HTTP request arguments.
 * @param string               $url         The request URL.
 *
 * @return false|array|WP_Error
 */
function wp_kama_pre_http_request_filter( $response, $parsed_args, $url ){

	// filter...
	return $response;
}
$response(false|массив|WP_Error)
Если вернуть false, то HTTP запрос будет выполнен стандартно. В ином случае результатом выполнения запроса будет указанное значение.
По умолчанию: false
$parsed_args(массив)
Аргументы HTTP запроса. Ознакомиться с такими аргументами можно на странице описания функции wp_remote_request() или её обёртках.
$url(строка)
URL адрес запроса.

Примеры

0

#1 Запретим выполнять запрос "особого" плагина

Как правило платные плагины имеют свою систему обновлений и делают запрос на их наличие (или лицензии, или что угодно) на свой собственный сайт. По разным причинам, может возникнуть потребность эти запросы обрывать. Данный код родился для плагина, который на всех страницах админки делал http запрос на проверку своих обновлений и дико её тормозил (ошибка разработчика).

add_filter( 'pre_http_request', 'requested_domain_update_disabled', 9, 3 );

/**
 * @param false|array|WP_Error $response    A preemptive return value of an HTTP request. Default false.
 * @param array                $parsed_args HTTP request arguments.
 * @param string               $url         The request URL.
 *
 * @return false|array|WP_Error
 */
function requested_domain_update_disabled( $response, $parsed_args, $url ) {
	global $pagenow;

	// Не наш запрос
	if ( str_contains( $url, 'api.requested-domain.com' ) ) {
		return $response;
	}

	$is_ajax = wp_doing_ajax();
	$is_rest = defined( 'REST_REQUEST' ) && REST_REQUEST === true;
	$is_cron = wp_doing_cron();

	// Не запрещаем HTTP запросы при AJAX, REST и CRON запросах
	if ( $is_ajax || $is_rest || $is_cron ) {
		return $response;
	}

	// Не запрещаем HTTP запросы на страницах "Плагины" и "Обновления"
	if ( in_array( $pagenow, [ 'plugins.php', 'update-core.php' ] ) ) {
		return $response;
	}

	// Не запрещаем HTTP запросы на странице плагина
	if ( isset( $_GET['page'] ) && str_contains( $_GET['page'], 'requested-plugin' ) ) {
		return $response;
	}

	// Во всех остальных случаях возврщаем пустой результат запроса.
	return [
		'headers'  => [],
		'body'     => '',
		'response' => [],
		'cookies'  => [],
	];
	// или:
	// return ( new WP_HTTP_Requests_Response( new \WpOrg\Requests\Response() ) )->to_array();
}

Список изменений

С версии 2.9.0 Введена.

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

WP_Http::request()
pre_http_request
wp-includes/class-wp-http.php 258
$pre = apply_filters( 'pre_http_request', false, $parsed_args, $url );

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

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