Relative URLs in WordPress

Lesezeit: 7 Minuten

Relative URLs in WordPress
AidanCurran

Ich fand es in WordPress immer frustrierend, dass Bilder, Dateien, Links usw. mit einer absoluten URL anstelle einer relativen URL in WordPress eingefügt werden. Eine relative URL ist viel praktischer, um Domainnamen zu wechseln, zwischen http und https usw. zu wechseln. Heute habe ich entdeckt, dass, wenn Sie WP_CONTENT_URL mit einer relativen URL definieren, dann beim Einfügen von Dateien in Beiträge die relative URL für die Quelle anstelle der absoluten URL verwendet wird . Genau das, was ich schon immer wollte! Aber die offizielle WordPress-Dokumentation sagt, dass Sie a verwenden sollten Vollständiger URI wenn Sie WP_CONTENT_URL definieren.

WordPress-Codex sagt:

Setze WP_CONTENT_URL auf die Vollständiger URI dieses Verzeichnisses (kein abschließender Schrägstrich), zB

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

Alles scheint gut zu funktionieren, wenn ich eine relative URL verwende, z

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

Aber gibt es ein Problem bei der Verwendung eines relativen URI? Ich denke nur, dass es einen Grund für WordPress geben muss, der besagt, dass es mit einem vollständigen URI definiert werden sollte.

  • Ich denke, die Antwort ist, alle Verwendungen davon im WP-Code und im Code der von Ihnen verwendeten Plugins zu prüfen, um sicherzustellen, dass keiner davon ausgeht, dass es sich um eine vollständige URL handelt, wenn dies nicht der Fall ist, aber ich kann mir keinen Grund vorstellen aus dem Kopf heraus wäre es nicht in Ordnung.

    – Rup

    21. Juni 2013 um 23:40 Uhr

  • Probieren Sie dieses Plugin aus wordpress.org/plugins/relative-url oder lesen Sie dies kann Ihnen helfen deluxeblogtips.com/2012/06/relative-urls.html

    Benutzer2543022

    27. August 2013 um 16:01 Uhr

  • @Krishna: Warum brauchen wir ein Plugin, wenn wir einfach eine relative URL in wp-config eingeben können? Der Punkt der Frage ist herauszufinden, ob die Verwendung einer relativen URL in wp-config ein Problem verursachen kann.

    – AidanCurran

    28. August 2013 um 21:08 Uhr

  • Ich weine, wenn ich WordPress anfassen muss.

    – Toni Cronin

    23. Oktober 2014 um 15:04 Uhr

  • @TonyCronin Sei froh, dass es nicht Drupal ist.

    – Motorbaby

    21. September 2016 um 18:03 Uhr

Relative URLs in WordPress
brasophilo

Ich denke, das ist die Art von Frage, die nur ein Core-Entwickler beantworten könnte/sollte. Ich habe recherchiert und das Kernticket Nr. 17048 gefunden: An den Browser gelieferte URLs sollten root-relativ sein. Wo wir die Gründe finden können, die von Andrew Nacin, Lead Core Developer, erklärt wurden. Er verlinkt auch Das [wp-hackers] Gewinde. Auf diesen beiden Links sind dies die wichtigsten Zitate darüber, warum WP keine relativen URLs verwendet:

Kernticket:

  • Root-relative URLs sind nicht wirklich richtig. /path/ möglicherweise nicht WordPress, möglicherweise außerhalb der Installation. Es ist also wirklich nicht viel anders als eine absolute URL.

  • Jegliche relative URLs erschweren außerdem die Durchführung von Transformationen erheblich, wenn die Installation verschoben wird. Das Suchen-Ersetzen wird in den meisten Situationen notwendig sein, und aus diesen Gründen ist es ironischerweise besser, eine absolute URL zu haben.

  • An zahlreichen anderen Stellen werden absolute URLs benötigt. Wenn Sie diese bedingt hinzufügen müssen, wird dies zur Verarbeitung beitragen und potenzielle Fehler (und Inkompatibilitäten mit Plugins) einführen.

[wp-hackers] Gewinde

  • In Bezug auf was bin ich mir nicht sicher, da sich WordPress oft in einem Unterverzeichnis befindet, was bedeutet, dass wir den Inhalt immer verarbeiten müssen, um dann den Rest des Pfads hinzuzufügen. Dies führt zu Overhead.

  • Denken Sie daran, dass es zwei Arten von relativen URLs gibt, mit und ohne führenden Schrägstrich. Beide haben Einschränkungen, die eine ordnungsgemäße Implementierung unmöglich machen.

  • WordPress sollte (und tut) absolute URLs speichern. Dies erfordert keine Vorverarbeitung des Inhalts, keinen Overhead, keine Mehrdeutigkeit. Wenn Sie umziehen müssen, ist es ein globales Suchen-Ersetzen in der Datenbank.


Und persönlich habe ich mehr als einmal gefunden, dass Themes und Plugins schlecht codiert sind, wenn sie einfach kaputt gehen WP_CONTENT_URL ist definiert.
Sie weiß nicht Dies kann eingestellt werden und davon ausgehen, dass dies wahr ist: WP.URL/wp-content/WhatEver, und das ist nicht immer der Fall. Und unterwegs wird etwas kaputt gehen.


Das Plugin Relative URLs (verlinkt edse‘s Answer), wendet die Funktion an wp_make_link_relative in einem Reihe von Filtern im Aktionshaken template_redirect. Es ist ein ziemlich einfacher Code und scheint eine nette Option zu sein.

  • Gute Infos. Ich verwende immer root-relative Pfade, damit ich ohne Probleme auf dev.mysite.com -> qa.mysite.com -> www.mysite.com oder sogar www.anothersite.com bereitstellen kann. Es ist bedauerlich, dass WP nicht mit diesem Hintergedanken entwickelt wurde. Seit Einstellung WP_CONTENT_URL scheint nicht beabsichtigt zu sein (obwohl es möglich ist), relative URLs zu setzen, scheint das Plugin die beste Option zu sein. Gibt es einen Testfall, wo ein Plugin beim Setzen abbricht WP_CONTENT_URL aber funktioniert gut, wenn Sie das Plugin verwenden?

    – Justin

    29. August 2013 um 20:53 Uhr


  • WordPress war nie für richtige Websites gedacht, es war immer ein schneller Hack, geschrieben von Hackern, die (deutlich aus den Zitaten hier) nicht über den Tellerrand hinaus gedacht oder geschaut haben. Sie können eine Website nur verschieben, wenn sie RICHTIG relative und/oder stammrelative URLs verwendet. Absolute URLs verhindern dies absolut.

    – Haqa

    15. Juni 2017 um 9:13 Uhr

  • Ich habe Websites erstellt, die so eingerichtet werden können, dass sie in Subdomänen, Stamm- oder Unterordnern leben. Es ist nicht sehr schwer. Ich habe das Gefühl, dass die Gründe im Grunde lauten: “Wir haben das vor langer Zeit gebaut und diese Änderung würde zu viel kaputt machen, also reparieren wir es nicht.”

    – Donny V.

    20. Februar 2018 um 20:42 Uhr

  • Ich denke immer noch, dass keiner der Gründe der Entwickler gültig ist. Die hartcodierte URL hat die gleichen Probleme wie eine relative, es ist nur eine weitere wirklich schlechte Praxis, die die ursprünglichen Entwickler in ihrem Toolkit für „schlechte Angewohnheiten“ haben … es gibt viele davon in WordPress, weshalb sie mehrfach gegabelt wurde, um sie zu entfernen diese Probleme.

    – Dawesi

    21. Juni 2018 um 10:13 Uhr

  • “Wenn Sie umziehen müssen, ist es ein globales Suchen-Ersetzen in der Datenbank.”. Laut Dokumentation würde dies Guuids und damit die gesamte Site beschädigen. Beachten Sie außerdem, dass einige URLs in der Datenbank Schrägstriche mit Backslash-Escapezeichen aufweisen. Aber … warum zum Teufel haben die Entwickler keinen Platzhalter wie {BASE_URL} verwendet, wenn absolute URLs unbedingt benötigt werden? “{BASE_URL}/wp-content/” könnte etwas bequemer sein als "http://dev.example.com/subdir/wp-content" wenn Sie auf die (https!) prod-Site wechseln. “Oh, ich schreibe nie PI, ich schreibe immer 3.141592653589793238462643383279 – einfacher im Code zu finden”. Jawohl.

    – Klauen

    13. Juli 2020 um 13:02 Uhr


<?php wp_make_link_relative( $link ) ?>

Vollständige URL-Pfade in relative Pfade umwandeln.

Entfernt die http- oder https-Protokolle und die Domäne. Behält den Pfad „https://stackoverflow.com/“ am Anfang bei, also ist es kein echter relativer Link, sondern von der Web-Root-Basis.

Referenz: WordPress-Kodex

  • und wo legst du das php-snippet ab?

    – Eduard

    31. Juli 2020 um 20:38 Uhr

  • Die wahre Antwort. Danke!

    – jlbang

    27. Januar 2021 um 2:57 Uhr

Ich habe es auf meiner Website gelöst, indem ich dies in functions.php gemacht habe

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("https://stackoverflow.com/", "https://stackoverflow.com/"), $str);

   return apply_filters("rsssl_fixer_output", $str);

}

Ich habe an einem Plugin teilgenommen, es in Stücke geschnitten und daraus gemacht. Es ersetzte ALLE Links auf meiner Seite (Menüs, CSS, Skripte etc.) und alles funktionierte.

1646639949 953 Relative URLs in WordPress
danielsalare

Ich stimme Rupi zu. Ich denke, der Hauptgrund ist, Verwirrung bei relativen Pfaden zu vermeiden. Ich denke, WordPress kann mit relativen Pfaden von Grund auf neu arbeiten, aber das Problem kann auftreten, wenn mehrere Plugins verwendet werden, wie das Thema konfiguriert ist usw.

Ich habe dieses Plugin einmal für relative Pfade verwendet, als ich an Testservern gearbeitet habe:

Root-relative URLs
Wandelt alle URLs in Root-relative URLs um, um dieselbe Website auf mehreren IPs zu hosten, die Produktionsmigration zu vereinfachen und das Testen mobiler Geräte zu verbessern.

Ich habe immer nur verwendet get_site_url(). Zum Beispiel:

<img src="<?=get_site_url();%20?>/wp-content/uploads/2021/05/[email protected]" />

1646639949 184 Relative URLs in WordPress
Umarmung

Unter Einstellungen => Medien gibt es eine Option für ‘Vollständiger URL-Pfad für Dateien’. Wenn Sie dies auf den standardmäßigen Medienverzeichnispfad „/wp-content/uploads“ anstelle von leer setzen, werden relative Pfade eingefügt, z. B. „/wp-content/uploads/2020/06/document.pdf“.

Ich bin mir nicht sicher, ob es alle Links relativ macht, zB zu Beiträgen, aber zumindest handhabt es Medien, was wahrscheinlich das ist, worüber sich die meisten Leute Sorgen machen.

1646639950 233 Relative URLs in WordPress
Botond Vajna

sollte get_home_url() verwenden, dann sind Ihre Links absolut, aber es hat keinen Einfluss, wenn Sie die Site-URL ändern

964180cookie-checkRelative URLs in WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy