Я всегда считал, что разочарование в Wordpress заключается в том, что изображения, файлы, ссылки и т.д. вставляются в WordPress с абсолютным URL вместо относительного URL. Относительный URL-адрес намного удобнее для переключения доменных имен, изменяющихся между http и https и т.д. Сегодня я обнаружил, что если вы определите WP_CONTENT_URL с относительным URL-адресом, то при вставке файлов в сообщения они используют относительный URL-адрес для src вместо абсолютного URL-адреса, Только то, что я всегда хотел! Но официальная документация Wordpress говорит, что вы должны использовать полный URI, если вы определяете WP_CONTENT_URL.
Установите WP_CONTENT_URL в полный URI этого каталога (без трейлинга слэш), например
define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');
Кажется, что все работает нормально, когда я использую относительный URL, например.
define( 'WP_CONTENT_URL', '/my-content-folder');
Но есть ли какая-то проблема с использованием относительного URI? Я просто думаю, что для Wordpress должна быть причина, заявляющая, что она должна быть определена с полным URI.
Я думаю, что это вопрос, на который может отвечать/должен отвечать только основной разработчик. Я исследовал и нашел основной билет № 17048: URL-адреса, доставленные в браузер, должны относиться к корням. Где мы можем найти причины, объясненные Эндрю Насином, ведущим разработчиком ядра. Он также ссылается на этот поток [wp-hackers]. На обеих этих ссылках это ключевые цитаты о том, почему 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 Answer), применяет функцию wp_make_link_relative
в серии фильтров в action hook template_redirect
. Это довольно простой код и кажется приятным вариантом.
WP_CONTENT_URL
не предназначена (хотя и позволяет) для установки относительных URL, плагин кажется лучшим вариантом. Есть ли тестовый случай, когда плагин ломается при установке WP_CONTENT_URL
но работает нормально при использовании плагина?
/
а относительные URI (для использования внутри <a>
) никогда не начинаются с http://
.
<?php wp_make_link_relative( $link ) ?>
Преобразование всех URL-адресов в относительные пути.
Удаляет протоколы http или https и домен. Сохраняет путь "/" в начале, поэтому это не истинная относительная ссылка, а из корневой базы веб-сайта.
Ссылка: Wordpress Codex
Я согласен с Rup. Я думаю, главная причина - избегать путаницы на относительных путях. Я думаю, Wordpress может работать с нуля с относительными путями, но проблема может возникнуть при использовании нескольких плагинов, способа настройки темы и т.д.
Я использовал этот плагин для относительных путей при работе с серверами тестирования:
Коренные относительные URL
Преобразует все URL-адреса в корневые URL-адреса для размещения одного и того же сайта на нескольких IP-адресах, упрощает производственную миграцию и улучшает тестирование мобильных устройств.
WP_CONTENT_URL
относительным, и не WP_CONTENT_URL
с его собственным подходом. Что я хотел бы знать, так это то, есть ли на самом деле известная ловушка при создании относительной WP_CONTENT_URL
.
WP_CONTENT_URL
, однако это не является строго обязательным.
Я решил это на своем сайте сделать это в functions.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-адреса сайта
Существует простой способ
Вместо /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
Я думаю, что вы делаете это, пока вы меняете имена доменов, файл дампа sql, который у вас есть, вы можете заменить все экземпляры старого имени домена новым. Это только опция, так как нет плагинов, которые помогут вам сделать это.
Это самый быстрый способ.