Функция SET_URL_SCHEME() в WordPress
Функция set_url_scheme() в WordPress позволяет задать схему (протокол) для URL. Эта функция полезна для того, чтобы корректно указать, используем ли мы HTTP или HTTPS для наших ссылок.
Использование функции
Функция вызывается следующим образом:
set_url_scheme( $url, $scheme );
Параметры:
- $url (string) — обязательный параметр. Это абсолютный URL, который включает схему.
-
$scheme (string|null) — схема, которую мы хотим задать для URL. Это может быть:
'http''https''login''login_post''admin''relative''rest''rpc'null
По умолчанию —
null.
Возвращаемое значение
Функция возвращает строку, которая представляет собой URL с установленной схемой.
Примеры использования
Рассмотрим несколько примеров работы функции set_url_scheme().
Пример 1: Изменение протокола
$res = [
set_url_scheme( 'http://example.com/foo' ), //> https://example.com/foo или http://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
];
// Печатаем результат
print_r( $res );
Пример 2: Не стандартные URL
$res = [
set_url_scheme( '//example.com/foo' ), //> https://example.com/foo или http://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
];
// Печатаем результат
print_r( $res );
Пример 3: Обработка некорректных строк
$res = [
// Не работает с не URL строками (возвращает как есть)
set_url_scheme( '/foo', 'https' ), //> /foo
set_url_scheme( 'example.com/foo', 'https' ), //> example.com/foo
];
// Печатаем результат
print_r( $res );
Подробное описание реализации функции
Вот как выглядит код функции set_url_scheme():
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 ( str_starts_with( $url, '//' ) ) {
$url = 'http:' . $url;
}
if ( 'relative' === $scheme ) {
$url = ltrim( preg_replace( '#^w+://[^/]*#', '', $url ) );
if ( '' !== $url && '/' === $url[0] ) {
$url = '/' . ltrim( $url, "/ tnr x0B" );
}
} else {
$url = preg_replace( '#^w+://#', $scheme . '://', $url );
}
return apply_filters( 'set_url_scheme', $url, $scheme, $orig_scheme );
}
Как работает функция?
- ��роверка схемы: Если схема не задана, функция определяет, используется ли HTTPS. Если да — устанавливает схему как
'https', в противном случае —'http'. - Обработка URL: В зависимости от заданной схемы, функция обрабатывает URL и возвращает его в требуемом формате.
- Фильтрация результата: Функция применяет фильтры, чтобы другие плагины или темы могли модифицировать конечный результат.
Заключение
Функция set_url_scheme() в WordPress — это мощный инструмент для работы с URL. Понимание её работы поможет вам лучше управлять ссылками на вашем сайте и гарантировать, что они работают корректно при использовании различных протоколов.