Как использовать относительные ссылки на моих страницах?
На моих веб-страницах я хочу использовать относительные ссылки вместо абсолютных.
Однако страницы не позволяют использовать PHP-код внутри них, поэтому я не могу создавать URL-адреса относительным способом.
Как получить относительные URL-адреса внутри страниц WordPress, чтобы изменение доменных имен не влияло на ссылки?

В WordPress есть встроенная функция для удаления протокола и домена из абсолютных URL — wp_make_link_relative
, расположенная в файле /wp-includes/formatting.php
:
function wp_make_link_relative( $link ) {
return preg_replace( '|https?://[^/]+(/.*)|i', '$1', $link );
}
Чтобы применить эту функцию к (например) постоянным ссылкам, просто добавьте фильтр следующим образом:
add_filter( 'the_permalink', 'wp_make_link_relative' );
Deluxe Blog Tips показывает, как применить это к различным типам ссылок, убедившись, что ссылки на ленты и карты сайта не затрагиваются:
add_action( 'template_redirect', 'rw_relative_urls' );
function rw_relative_urls() {
// Ничего не делать, если:
// - Это лента
// - Это карта сайта от плагина WordPress SEO
if ( is_feed() || get_query_var( 'sitemap' ) )
return;
$filters = array(
'post_link',
'post_type_link',
'page_link',
'attachment_link',
'get_shortlink',
'post_type_archive_link',
'get_pagenum_link',
'get_comments_pagenum_link',
'term_link',
'search_link',
'day_link',
'month_link',
'year_link',
);
foreach ( $filters as $filter )
{
add_filter( $filter, 'wp_make_link_relative' );
}
}

$my_url = 'my/relative/url.php';
echo site_url($my_url);
Функция site_url() при использовании без параметров возвращает абсолютный путь к вашему блогу. Но если вы добавите аргумент, как в моем примере выше, она добавит абсолютный путь перед вашим относительным путем. Убедитесь, что ваш URL не начинается со слеша (например: /это/может/не/сработать).
Наконец, если ваш WordPress установлен в корне сервера, вы можете использовать путь относительно сервера (в этом случае используется начальный слеш для указания корня сервера). Например, если ваш блог установлен по адресу http://www.me.com/blog
, то вы можете безопасно обращаться к относительным ссылкам с помощью /blog/my_link.php
.

два способа сделать это:

здесь говорится только о постоянных ссылках, но не о том, как использовать относительные URL вместо абсолютных

Прокрутите вниз на этой странице или лучше перейдите по http://codex.wordpress.org/Linking_Posts_Pages_and_Categories#Absolute_versus_Relative_Links

Раньше я использовал шорткод с get_bloginfo для относительных путей внутри содержимого поста. Я собирался превратить это в полноценный плагин, но мне казалось, что ребята из Automatic уже выпустили подобное решение, которое я сейчас не могу найти. Вот простой пример того, как это работает (мой вариант я сейчас не могу найти, так как больше не использую его), возможно, разработчики из Automatic тоже пришли к этому выводу, как и Bainternet в своем посте.
Простая функция шорткода, которая возвращает базовый URL вашего сайта:
function my_relative_post_image_link() {
$linky = get_bloginfo('wpurl');
echo $linky;
}
add_shortcode('posty', 'my_relative_post_image_link');
Если ваш сайт example.com, то использование шорткода [posty] в содержимом вернет example.com в виде текста.
Для практического использования вам потребуется настроить функцию, используя дополнительные параметры из get_bloginfo, и обернуть результат в необходимые HTML-теги. http://codex.wordpress.org/Function_Reference/get_bloginfo

Эта функция должна быть добавлена в файл functions.php
вашей темы. Она сделает все постоянные ссылки относительными.
// делаем ссылки относительно корня
function make_href_root_relative($input) {
return preg_replace('!http(s)?://' . $_SERVER['SERVER_NAME'] . '/!', '/', $input);
}
function root_relative_permalinks($input) {
return make_href_root_relative($input);
}
add_filter( 'the_permalink', 'root_relative_permalinks' );
Изображения в контенте должны использовать абсолютные ссылки ЕСЛИ эти изображения будут использоваться в RSS-ридерах. Если изображения используют относительные ссылки, ридеры попытаются загрузить изображения со своих собственных доменов.
Также есть небольшое влияние на производительность при использовании относительных ссылок для изображений. С относительными постоянными ссылками это, кажется, не имеет значения.
На некоторых серверах может потребоваться добавить базовый href с корнем вашего сайта, чтобы ссылки работали корректно.

Я думаю, что существует плагин Absolute Relative Links, который заменит все ссылки на ваших страницах на относительные. Он работает достаточно хорошо, что означает, что вам не придется возвращаться и исправлять старые ссылки, которые остались абсолютными.

В этом руководстве показан базовый способ изменения постоянных ссылок записей на относительные. Я также улучшил этот метод, чтобы сделать все ссылки в WordPress относительными. Окончательный код доступен здесь.
