Относительные URL-адреса в Wordpress


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

Wordpress кодекс говорит:

установите 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 73

7 ответов:

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

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

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

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

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

[wp-hackers] thread

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

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

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


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


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

<?php wp_make_link_relative( $link ) ?>

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

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

ссылки: Wordpress Codex

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

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

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

Я решил это на своем сайте, сделав это в функциях.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/ или если вы не используете постоянные ссылки сделайте следующее :

Post

index.php?p=123

страница

index.php?page_id=42

категория

index.php?cat=7

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