Преобразование URL в относительный путь с функцией WP_MAKE_LINK_RELATIVE()

WP_MAKE_LINK_RELATIVE() │ WP 2.1.0

Функция WP_MAKE_LINK_RELATIVE() преобразует полные URL-адреса в относительные пути.

Описание функции

Эта функция удаляет протокол (http или https) и доменное имя, оставляя только путь к ресурсу. Путь начинается с символа /, поэтому это не совсем относительная ссылка, а скорее ссылка относительно корня веб-сайта.

  • Время выполнения — 0.00002 секунды (очень быстро)
  • 50000 вызовов — 0.02 секунды (мгновенно)
  • PHP 7.1.5, WP 4.8

Хуки

Функция не использует хуки.

Возвращаемое значение

Функция возвращает строку — абсолютный путь.

Применение

wp_make_link_relative( $link );

Параметры:

  • $link (строка) — полный URL-адрес (обязательный).

Примеры

1. Преобразование абсолютного URL в относительный

Посмотрим, что возвращает функция при передаче различных URL-адресов:

echo wp_make_link_relative('http://example.com/foo/page/'); //> /foo/page/
echo wp_make_link_relative('http://example.com/foo/?bar=baz'); //> /foo/?bar=baz
echo wp_make_link_relative('/sample-page/'); //> /sample-page/
echo wp_make_link_relative('//example.com/sample-page/'); //> /sample-page/
echo wp_make_link_relative('http://example.com/image.jpg 1x'); //> /image.jpg 1x
echo wp_make_link_relative(''); //> ''

Однако обратите внимание:

echo wp_make_link_relative('//wp-content/file.png'); //> /file.png

2. Еще один способ сделать абсолютный URL относительным

Для этого можно использовать функцию wp_parse_url() с параметром PHP_URL_PATH:

wp_parse_url('http://example.com/foo/page/', PHP_URL_PATH); // /foo/page/

Эта функция удаляет все параметры запроса, начинающиеся с ?.

Пример использования wp_parse_url():

wp_parse_url('http://example.com/foo/?bar=baz', PHP_URL_PATH); // /foo/

Сравним это с wp_make_link_relative():

$res = [
    wp_make_link_relative('http://example.com/foo/?bar=baz'),
    wp_make_link_relative('http://example.com/foo/page/'),
    wp_make_link_relative('/sample-page/'),
    wp_make_link_relative('//example.com/sample-page/'),
    wp_make_link_relative('http://example.com/image.jpg 1x'),
    wp_make_link_relative('//wp-content/file.png'),
];

$res2 = [
    wp_parse_url('http://example.com/foo/?bar=baz', PHP_URL_PATH),
    wp_parse_url('http://example.com/foo/page/', PHP_URL_PATH),
    wp_parse_url('/sample-page/', PHP_URL_PATH),
    wp_parse_url('//example.com/sample-page/', PHP_URL_PATH),
    wp_parse_url('http://example.com/image.jpg 1x', PHP_URL_PATH),
    wp_parse_url('//wp-content/file.png', PHP_URL_PATH),
];

foreach ($res as $k => $re) {
    echo ($re === $res2[$k] ? 'YES' : 'NO') . " - $re === {$res2[$k]}n";
}

/*
NO - /foo/?bar=baz === /foo/
YES - /foo/page/ === /foo/page/
YES - /sample-page/ === /sample-page/
YES - /sample-page/ === /sample-page/
YES - /image.jpg 1x === /image.jpg 1x
YES - /file.png === /file.png
*/

Изменения в версии

Функция была введена в версии 2.1.0. Поддержка относительных URL-адресов была добавлена в версии 4.1.0.

Код функции

function wp_make_link_relative( $link ) {
    return preg_replace( '|^(https?:)?//[^/]+(/?.*)|i', '$2', $link );
}

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

Теперь вы знаете, как использовать функцию WP_MAKE_LINK_RELATIVE() для преобразования абсолютных ссылок в относительные. Это может быть полезно в различных сценариях на вашем сайте WordPress.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *