wp_make_link_relative()WP 2.1.0

Изменяет переданный УРЛ: делает из него относительный. Удаляет http или https протокол и домен, оставляя / в начале: http://example.com/foo станет /foo

С версии 4.1. понимает, если передать уже относительный URL.

1 раз — 0.00002 сек (очень быстро) | 50000 раз — 0.02 сек (скорость света) | PHP 7.1.5, WP 4.8

Хуков нет.

Возвращает

Строку. Строку: относительный путь.

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

wp_make_link_relative( $link );
$link(строка) (обязательный)
Полный УРЛ, из которого нужно удалить начальную часть.

Примеры

0

#1 Создадим относительный УРЛ из абсолютного

Примеры того, что выводит функция при передаче разных 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( '//wp-content/file.png' ); //> /file.png
0

#2 Другой вариант сделать абсолютную ссылку относительной

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

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

Отличается он тем, что срезает все параметры запроса начинающиеся с ?:

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 Введена.
С версии 4.1.0 Support was added for relative URLs.

Код wp_make_link_relative() WP 6.1.1

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