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

68

Я всегда считал, что разочарование в 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.

  • 3
    Я предполагаю, что ответ заключается в том, чтобы проверять все его использование в коде WP и в коде плагинов, которые вы используете, чтобы убедиться, что ни один из них не предполагает, что это полный URL, а это не так, но я не могу придумать ни одной причины это не будет хорошо с моей головы.
  • 0
    Как насчет вложенных каталогов с тем же именем? или многосайтовая установка WordPress?
Показать ещё 8 комментариев
Теги:

7 ответов

42
Лучший ответ

Я думаю, что это вопрос, на который может отвечать/должен отвечать только основной разработчик. Я исследовал и нашел основной билет № 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. Это довольно простой код и кажется приятным вариантом.

  • 11
    Хорошая информация Я всегда использую относительные корневые пути, чтобы можно было без проблем выполнить развертывание на dev.mysite.com -> qa.mysite.com -> www.mysite.com или даже на www.anothersite.com. К сожалению, WP не был разработан с учетом этого. Поскольку установка WP_CONTENT_URL не предназначена (хотя и позволяет) для установки относительных URL, плагин кажется лучшим вариантом. Есть ли тестовый случай, когда плагин ломается при установке WP_CONTENT_URL но работает нормально при использовании плагина?
  • 2
    Относительные пути никогда не начинаются с / а относительные URI (для использования внутри <a> ) никогда не начинаются с http:// .
Показать ещё 6 комментариев
7
<?php wp_make_link_relative( $link ) ?>

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

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

Ссылка: Wordpress Codex

4

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

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

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

  • 5
    Зачем нужен плагин, если все, что нужно, это настроить одну константу в файле wp-config? Если только он не обеспечивает решение, позволяющее избежать конкретной ловушки, делающей WP_CONTENT_URL относительным, и не WP_CONTENT_URL с его собственным подходом. Что я хотел бы знать, так это то, есть ли на самом деле известная ловушка при создании относительной WP_CONTENT_URL .
  • 0
    Я считаю, что преимущество плагина в том, что он поддерживает тот же интерфейс с остальной частью Wordpress и экосистемой плагина, предоставляя ему абсолютные URL-адреса. В этом смысле обходятся любые потенциальные проблемы использования нерекомендованного значения в настройке WP_CONTENT_URL , однако это не является строго обязательным.
Показать ещё 5 комментариев
0

Я решил это на своем сайте сделать это в 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, скрипты и т.д.), И все работало.

-1

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

-3

Существует простой способ

Вместо /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

  • 0
    Это не отвечает на вопрос.
-4

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

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

  • 1
    Имейте в виду, что вы также захотите заменить имя домена в сериализованных строках PHP. Этот удобный инструмент поиска и замены, кажется, является стандартным способом работы (репозиторий GitHub здесь ). Это используется в решениях развертывания Capistrano, которые я использую как capistrano-wp, и, кажется, работает очень хорошо. На него также ссылаются на официальной странице Кодекса Moving WordPress .
  • 3
    Этот подход грязный и подвержен ошибкам. Если мы сможем избежать этого, используя относительные URL в wp-config, разве это не намного лучше? Суть вопроса заключается в том, чтобы выяснить, может ли проблема вызвать использование относительного URL в wp-config.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню