set_url_scheme() WP 3.4.0

Встановлює протокол для вказівної URL-адреси (посилання). Якщо $scheme вказати relative , то отримає відносне посилання.

Функція НЕ додає схему до порожньої URL-адреси. Якщо вказати так: example.org/what/ever, то функція не зрозуміє, що це URL і не обробить такий рядок (поверне його як є). Тому у вихідного URL завжди має бути базова схема, наприклад, https://.

$url = 'example.org/what/ever/';
echo set_url_scheme($url, 'https'); // example.org/what/ever

Працює на основі:
is_ssl() ,
force_ssl_admin()
1 раз – 0.000017 сек
(дуже швидко) | 50000 разів – 0.07 сек
(швидкість світла) |
PHP 7.0.2, WP 4.4.1

Хуки з функції

Повертає

Строку. Змінена URL-адреса під обрану схему.

Використання

set_url_scheme($url, $scheme);
$url
(рядок) (обов’язковий)
URL, що містить протокол http(s).
$scheme
(рядок/null)

Схема відповідно до якої потрібно змінювати URL-адресу. Може бути:

http
https
relative — поверне відносну URL-адресу (без домену).
login - протокол сторінки авторизації
login_post
admin
rest
rpc
null - поточний протокол сайту is_ssl()

Типово: null (поточний протокол сайту is_ssl())

Приклади

0

#1 Демонстрація зміни протоколу URL.

Код виконувався на сайті з HTTPS протоколом з дефолту:

$res = [
	set_url_scheme( 'http://example.com/foo' ), //> https://example.com/foo
	set_url_scheme('http://example.com/foo', 'http'), //> http://example.com/foo
	set_url_scheme('http://example.com/foo', 'https'), //> https://example.com/foo
	set_url_scheme( 'http://example.com/foo', 'relative' ), //> /foo

	set_url_scheme('//example.com/foo'), //> https://example.com/foo
	set_url_scheme('//example.com/foo', 'http'), //> http://example.com/foo
	set_url_scheme('//example.com/foo', 'https'), //> https://example.com/foo
	set_url_scheme('//example.com/foo', 'relative'), //> /foo

	// Не працює якщо це не URL
	set_url_scheme('/foo', 'https'), //> /foo
	set_url_scheme('example.com/foo', 'https'), //> example.com/foo

	// Винятки
	set_url_scheme('///example.org/foo', 'https'), //> https:///example.org/foo
];

print_r ($ res);

список змін

З версії 3.4.0Введено.
З версії 4.4.0The ‘rest’ scheme was added.

Код set_url_scheme() WP 6.0.2

function set_url_scheme( $url, $scheme = null ) {
	$orig_scheme = $scheme;

	if ( ! $scheme ) {
		$scheme = is_ssl()? 'https': 'http';
	} elseif ( 'admin' === $scheme || 'login' === $scheme || 'login_post' === $scheme || 'rpc' === $scheme ) {
		$scheme = is_ssl() || force_ssl_admin() ? 'https': 'http';
	} elseif ( 'http' !== $scheme && 'https' !== $scheme && 'relative' !== $scheme ) {
		$scheme = is_ssl()? 'https': 'http';
	}

	$ url = trim ($ url);
	if ( substr( $url, 0, 2 ) === '//' ) {
		$url = 'http:' . $url;
	}

	if ( 'relative' === $scheme ) {
		$url = ltrim( preg_replace( '#^w+://[^/]*#', '', $url ) );
		if ( '' !== $url && '/' === $url[0] ) {
			$url = '/'. ltrim($url, "/tnrx0B");
		}
	} else {
		$url = preg_replace( '#^w+://#', $scheme . '://', ​​$url );
	}

	/**
	 * Filters the resulting URL after setting the scheme.
	 *
	 * @ Since 3.4.0
	 *
	 * @param string $url Докладні URL-адреси включають scheme and path.
	 * @param string $scheme Scheme applied to the URL. Один з 'http', 'https', або 'relative'.
	 * @param string|null $orig_scheme Scheme requested for the URL. Один з 'http', 'https', 'login',
	 * 'login_post', 'admin', 'relative', 'rest', 'rpc', або null.
	 */
	return apply_filters( 'set_url_scheme', $url, $scheme, $orig_scheme);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *