Функция wp_make_link_relative()
позволяет преобразовать абсолютный URL в относительный, убирая протокол и домен и оставляя только путь от корня сайта. Это полезно для оптимизации работы сайта и повышения гибкости в работе с URL-адресами, особенно если планируется менять домен или настраивать разные среды (например, разработка и продакшн).
wp_make_link_relative( string $link ): string
Аргументы:
$link
(строка) — полный URL, из которого нужно создать относительный путь.
Возвращаемое значение:
Функция возвращает строку с относительным путем. Например, http://example.com/sample-page/
преобразуется в /sample-page/
.
Как работает wp_make_link_relative()
Функция убирает начальные элементы URL (протокол и домен), оставляя только путь от корня сайта. Примерно, https://example.com/path/to/page
станет /path/to/page
.
Пример 1: Простой URL
echo wp_make_link_relative('https://example.com/site/page/');
// Результат: /site/page/
Пример 2: URL с параметрами
echo wp_make_link_relative('https://example.com/site/page/?param=value');
// Результат: /site/page/?param=value
Пример 3: Относительный URL без изменений
Если URL уже относительный, функция вернет его как есть:
echo wp_make_link_relative('/already-relative/page/');
// Результат: /already-relative/page/
Пример 4: Использование с идентификатором записи
С помощью функции get_permalink()
можно получить полный URL записи и преобразовать его:
echo wp_make_link_relative(get_permalink($post->ID));
// Результат будет аналогичен: /2023/09/sample-post/
Пример 5: URL с нестандартным портом
Функция не поддерживает порты в URL. Если вы передадите URL с портом, он может быть обработан некорректно:
echo wp_make_link_relative('http://example.com:8080/sample-page/');
// Результат: :8080/sample-page/
Сравнение с wp_parse_url()
Если вам нужно удалить и параметры URL, можно использовать wp_parse_url()
с флагом PHP_URL_PATH
:
echo wp_parse_url('https://example.com/site/page/?param=value', PHP_URL_PATH);
// Результат: /site/page/
Примеры в сравнении с wp_parse_url()
Давайте посмотрим на несколько URL-адресов, как они обрабатываются wp_make_link_relative()
и wp_parse_url()
:
$res = [
wp_make_link_relative('https://example.com/path/?param=value'),
wp_make_link_relative('https://example.com/site/page/'),
wp_make_link_relative('/sample/page/'),
];
$res2 = [
wp_parse_url('https://example.com/path/?param=value', PHP_URL_PATH),
wp_parse_url('https://example.com/site/page/', PHP_URL_PATH),
wp_parse_url('/sample/page/', PHP_URL_PATH),
];
foreach ($res as $k => $relativeUrl) {
echo ( $relativeUrl === $res2[$k] ? 'Да' : 'Нет' ) . " - $relativeUrl === {$res2[$k]}\n";
}
/* Вывод:
Нет - /path/?param=value === /path/
Да - /site/page/ === /site/page/
Да - /sample/page/ === /sample/page/
*/
Заключение
Функция wp_make_link_relative()
удобна для преобразования URL, но не подходит для ссылок с нестандартными портами или URL, которые требуют обрезки параметров. Для этих целей лучше использовать wp_parse_url()
с флагом PHP_URL_PATH
.