Относительные URL в Wordpress

мне всегда было неприятно в WordPress, что изображения, файлы, ссылки и т. д. вставляются в WordPress с абсолютным URL вместо относительного URL. Относительный url-адрес гораздо удобнее для переключения доменных имен, изменения между http и https и т. д. Сегодня я обнаружил, что если вы определяете WP_CONTENT_URL с относительным url, то при вставке файлов в сообщения они используют относительный url для src вместо абсолютного url. Как раз то, чего я всегда хотела! Но официальный Wordpress в документации говорится, что вы должны использовать полный URI если вы определяете WP_CONTENT_URL.

Wordpress codex говорит:

установите WP_CONTENT_URL в полный URI этого каталога (без трейлинга Слэш), например,

define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');

Кажется, что все работает нормально, когда я использую относительный URL, например

define( 'WP_CONTENT_URL', '/my-content-folder');

но есть ли проблема с использованием относительного URI? Я просто думаю, что должен будьте причиной для Wordpress, заявив, что он должен быть определен с полным URI.

7 ответов


Я думаю, что это вопрос, на который может/должен ответить только основной разработчик. Я исследовал и нашел основной билет #17048: URL-адреса, доставленные в браузер, должны быть корневыми. Где мы можем найти причины пояснил Андрей Nacin, ведущий разработчик ядра. Он также ссылается на это [wp-хакеры] поток. На обеих этих ссылках это ключевые цитаты о том, почему WP не использует относительные URL-адреса:

основной билет:

  • корневые относительные URL-адреса не совсем правильные. /path/ возможно, это не WordPress, это может быть вне установки. Так что на самом деле это не сильно отличается от абсолютного URL.

  • любые относительные URL-адреса также значительно затрудняют выполнение преобразований при перемещении установки. Найти-заменить будет необходимо в большинстве ситуаций, и по иронии судьбы, абсолютный URL-адрес более переносим по этим причинам.

  • абсолютные URL-адреса необходимы во многих других местах. Необходимость добавить их в условно добавит к обработке, а также ввести потенциальные ошибки (и несовместимости с плагинами).

[wp-хакеры] поток

  • относительно чего, я не уверен, так как WordPress часто находится в подкаталоге, что означает, что мы всегда нужно обрабатывать содержимое, чтобы затем добавить в остальную часть пути. Этот вводит накладные.

  • имейте в виду, что есть два типа относительных URL-адресов, с и без ведущий Слэш. Оба предостережения, что сделать это невозможно осуществлять.

  • WordPress должен (и делает) хранить абсолютные url. Этот не требует предварительной обработки контента, никаких накладных, никаких двусмысленностей. Если вы нужно переехать, это глобальная находка-замена в базе данных.


и, на личной ноте, не раз я находил тему и плагины плохо закодированы, что просто ломаются, когда WP_CONTENT_URL определяется.
Они!--49-->не знаю это можно установить и предположить, что это правда: WP.URL-адрес/WP-содержание/какая-то, а это не всегда так. И что-то сломается по пути.


плагин Относительные URLs (связан в edse'ы Ответ), применяет функцию wp_make_link_relative на серия фильтров в крюке действия template_redirect. Это довольно простой код, и кажется хорошим вариантом.


<?php wp_make_link_relative( $link ) ?>

преобразование полных URL-путей в относительные пути.

удаляет протоколы http или https и домен. Сохраняет путь ' / ' в начале, поэтому это не истинная относительная ссылка, а из корневой базы веб-сайта.

ссылки: Wordpress Codex


Я согласен с Rup. Я думаю, главная причина-избежать путаницы на относительных путях. Я думаю, wordpress может работать с нуля с относительными путями, но проблема может возникнуть при использовании нескольких плагинов,как настроена тема и т. д.

Я когда-то использовал этот плагин для относительных путей, при работе на серверах тестирования:

Корень-Относительные URL-Адреса
преобразует все URL-адреса в корневые относительные URL-адреса для размещения одного и того же сайт на нескольких IPs, более легкая миграция производства и лучшее тестирование мобильных устройств.


Я решил это на своем сайте, сделав это в функциях.в PHP

add_action("template_redirect", "start_buffer");
add_action("shutdown", "end_buffer", 999);

function filter_buffer($buffer) {
    $buffer = replace_insecure_links($buffer);
    return $buffer;
}
function start_buffer(){
    ob_start("filter_buffer");
}

function end_buffer(){
    if (ob_get_length()) ob_end_flush();
}

function replace_insecure_links($str) {

   $str = str_replace ( array("http://www.yoursite.com/", "https://www.yoursite.com/") , array("/", "/"), $str);

   return apply_filters("rsssl_fixer_output", $str);

}

Я взял часть одного плагина, разрезал его на куски и сделал это. Он заменил все ссылки на моем сайте (меню, CSS, скрипты и т. д.) и все работало.


следует использовать get_home_url (), тогда ваши ссылки являются абсолютными, но это не влияет, если вы измените url сайта


Я думаю, что вы делаете, когда вы меняете доменные имена, файл дампа sql, который у вас есть, вы можете заменить все экземпляры старого доменного имени новым. Это только вариант доступен, так как нет плагинов, которые помогут вам сделать это.

Это самый быстрый способ ..


есть простой способ

вместо /pagename/ использовать index.php/pagename/ или если вы не используете permalinks, сделайте следующее:

в должности

index.php?p=123

страница

index.php?page_id=42

категория

index.php?cat=7

дополнительная информация здесь:http://codex.wordpress.org/Linking_Posts_Pages_and_Categories