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

wp_validate_redirect() WP 2.8.1

Проверяет указанный URL на возможность использовать его для редиректа.

По умолчанию разрешаются только URL текущего сайта (внутренние URL адреса).

Если указанный URL не прошел проверку, то функция вернет значение второго параметра $default.

Что делает функция:

  1. Добавляет http: протокол для ссылок без протокола (//)
  2. Проверяет протокол, разрешены только http и https.
  3. Проверяет остальные компоненты URL.
  4. Сравнивает домен указанного URL с белым списком доменов на которые разрешен редирект. По умолчанию в белом списке находится только домен текущего сайта. Расширить белый список можно через фильтр allowed_redirect_hosts.

Чтобы очистить ссылку редиректа, используйте wp_sanitize_redirect()

Это pluggable функция — т.е. её можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.

Замена функции (переопределение) — в плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Является основой для: wp_get_referer(), wp_safe_redirect()
✈ 1 раз = 0.003549с = очень медленно | 50000 раз = 2.44с = быстро | PHP 7.0.32, WP 5.1.1
Хуки из функции
Возвращает

Строку. Указанные URL адрес, если он прошел проверку или значение $default параметра.

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

wp_validate_redirect( $location, $default );
$location(строка) (обязательный)
URL, который нужно проверить.
$default(строка)
Дефолтный URL, который вернет функция, если Url из параметра $location не пройдет проверку.
По умолчанию: ''

Примеры

#1 Демонстрация работы функции

Предполагается что функция запускалась на сайте wp-kama.ru.

echo wp_validate_redirect( 'http://foo.bar' );                   //> ''
echo wp_validate_redirect( 'http://foo.bar', 'http://my.site' ); //> http://my.site
echo wp_validate_redirect( '//wp-kama.ru/foo' );                 //> http://wp-kama.ru/foo
echo wp_validate_redirect( 'https://wp-kama.ru/foo' );           //> https://wp-kama.ru/foo

Код wp validate redirect: wp-includes/pluggable.php WP 5.2.1

<?php
function wp_validate_redirect( $location, $default = '' ) {
	$location = trim( $location, " \t\n\r\0\x08\x0B" );
	// browsers will assume 'http' is your protocol, and will obey a redirect to a URL starting with '//'
	if ( substr( $location, 0, 2 ) == '//' ) {
		$location = 'http:' . $location;
	}

	// In php 5 parse_url may fail if the URL query part contains http://, bug #38143
	$test = ( $cut = strpos( $location, '?' ) ) ? substr( $location, 0, $cut ) : $location;

	// @-operator is used to prevent possible warnings in PHP < 5.3.3.
	$lp = @parse_url( $test );

	// Give up if malformed URL
	if ( false === $lp ) {
		return $default;
	}

	// Allow only http and https schemes. No data:, etc.
	if ( isset( $lp['scheme'] ) && ! ( 'http' == $lp['scheme'] || 'https' == $lp['scheme'] ) ) {
		return $default;
	}

	// Reject if certain components are set but host is not. This catches urls like https:host.com for which parse_url does not set the host field.
	if ( ! isset( $lp['host'] ) && ( isset( $lp['scheme'] ) || isset( $lp['user'] ) || isset( $lp['pass'] ) || isset( $lp['port'] ) ) ) {
		return $default;
	}

	// Reject malformed components parse_url() can return on odd inputs.
	foreach ( array( 'user', 'pass', 'host' ) as $component ) {
		if ( isset( $lp[ $component ] ) && strpbrk( $lp[ $component ], ':/?#@' ) ) {
			return $default;
		}
	}

	$wpp = parse_url( home_url() );

	/**
	 * Filters the whitelist of hosts to redirect to.
	 *
	 * @since 2.3.0
	 *
	 * @param array       $hosts An array of allowed hosts.
	 * @param bool|string $host  The parsed host; empty if not isset.
	 */
	$allowed_hosts = (array) apply_filters( 'allowed_redirect_hosts', array( $wpp['host'] ), isset( $lp['host'] ) ? $lp['host'] : '' );

	if ( isset( $lp['host'] ) && ( ! in_array( $lp['host'], $allowed_hosts ) && $lp['host'] != strtolower( $wpp['host'] ) ) ) {
		$location = $default;
	}

	return $location;
}

Cвязанные функции

Из метки: validate (проверка)

Еще из метки: redirect (редиректы)

Еще из метки: URL (УРЛ Ссылка)

Еще из раздела: Без рубрики

Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться