Was ist der Unterschied zwischen home_url () und site_url ()

65

Meines Wissens nach site_url()gibt dies den Speicherort zurück, an dem sich die WordPress-Kerndateien befinden.

Wenn also mein Blog bei gehostet http://example.com/blogwird, site_url()kehrt das zurückhttp://example.com/blog

Aber wie unterscheidet home_url()sich das? Für mich home_url()ergibt sich das Gleiche:http://example.com/blog

Wenn das richtig ist, kann ich WordPress dann zurückgeben http://example.com/?

Praveen
quelle
4
Sie stellen zwei Fragen gleichzeitig zu einer sehr wichtigen Frage. Die Antwort auf "Was ist der Unterschied zwischen home_url () und site_url ()?" unterscheidet sich von der Frage: "Wie kann WordPress den URL-Stamm ohne das Unterverzeichnis zurückgeben, in dem es installiert ist?"
Volomike

Antworten:

51

Sie stellen gleichzeitig zwei Fragen:

  1. Was ist der Unterschied zwischen home_url()und site_url()?
  2. Wie bringe ich WordPress dazu, das URL-Stammverzeichnis ohne das Unterverzeichnis zurückzugeben, in dem es installiert ist?

Hier sind die Antworten, die ich zusammen mit Andrew Nacin, einem der Hauptentwickler von WordPress, bestätigte und einige Servertests durchführte, um zu bestätigen, was Andrew mir sagte.

Frage 1

home_url()Verweisen Sie unter Allgemein> Einstellungen von wp-admin auf das Feld "Site-Adresse (URL)". Verwirrend, nicht wahr? Ja, es steht "Site Address", also könnten Sie annehmen site_url(), aber Sie würden sich irren . Führen Sie Ihren eigenen Test durch und Sie werden sehen. (Sie können ein echo H1Feld mit site_url()und home_url()Werten vorübergehend oben in der Datei functions.php Ihres Themas ablegen.)

In der Zwischenzeit wird site_url()auf das Feld "WordPress-Adresse (URL)" unter "Allgemein"> "Einstellungen" verwiesen.

Wenn Sie also darauf verweisen möchten, wo ein physischer Pfad liegt, z. B. den Ordnerpfad eines Plugins auf der URL zum Laden eines Bildes oder den Ordnerpfad eines Themas zum Laden eines Bildes, sollten Sie für diese Funktionen andere Funktionen verwenden - schau dir plugins_url()und an get_template_directory_uri().

Das site_url()wird immer der Ort, an dem Sie die Website von Anheften auf erreichen /wp-adminam Ende, während home_url()würde sicher nicht dieser Ort sein.

Das home_url()wäre, wenn Sie Ihre Homepage , indem Sie Allgemein> Einstellungen „Site - Adresse (URL)“ Feld gesetzt haben.

Frage 2

Also, wenn ich mein Blog in platziert haben http://example.com/blog, und example.comist nur ein paar statische Seite , wo ich wie ein Portfolio - Thema haben, dann wäre dies ein Szenario, dass Linien mit Ihrer Frage. In einem solchen Fall würde ich diesen Codeausschnitt verwenden:

<?php
function getDomain() {
    $sURL    = site_url(); // WordPress function
    $asParts = parse_url( $sURL ); // PHP function

    if ( ! $asParts )
      wp_die( 'ERROR: Path corrupt for parsing.' ); // replace this with a better error result

    $sScheme = $asParts['scheme'];
    $nPort   = $asParts['port'];
    $sHost   = $asParts['host'];
    $nPort   = 80 == $nPort ? '' : $nPort;
    $nPort   = 'https' == $sScheme AND 443 == $nPort ? '' : $nPort;
    $sPort   = ! empty( $sPort ) ? ":$nPort" : '';
    $sReturn = $sScheme . '://' . $sHost . $sPort;

    return $sReturn;
}
Volomike
quelle
Haben Sie einen Link zur Diskussion mit A.Nacin?
Kaiser
1
Es war per E-Mail. Es tut uns leid. Oh, und danke für die Bearbeitung - ich werde mich beim nächsten Mal an diese Syntaxänderung erinnern.
Volomike
8
Es hat sehr lange gedauert und mir sehr viel Mühe gemacht, zu erkennen, dass 'Site Address (URL)' = 'home' und 'WordPress Address (URL)' = 'siteurl'. Sie sollten auf jeden Fall diese Etiketten ändern.
Jbm
Ihre Antwort auf die zweite Frage knackt den Jackpot!
Devner
7

Wenn Sie möchten, dass WP in einem Verzeichnis installiert wird, die Site sich jedoch im Stammverzeichnis Ihrer Domain befindet, müssen Sie die Hauptdatei index.php in das Stammverzeichnis Ihrer Domain verschieben und die require-Anweisung so bearbeiten, dass sie auf Ihr Verzeichnis verweist.

Dieser Prozess wird hier beschrieben: WordPress ein eigenes Verzeichnis geben .

Milo
quelle
Ich benutze immer nur, home_url()da ich im wp-Netzwerkmodus bin. Ich habe WordPress nur einmal ein eigenes Verzeichnis gegeben und es hat mir einfach nicht gefallen. Aber ich benutze das wp_content_dirauf einigen Seiten.
xLRDxREVENGEx
Ich habe keine Erfahrung mit Multisite, daher bin ich nicht vertraut, wie das Zeug in dieser Situation funktioniert. Ich ziehe es vor, WP in einem Verzeichnis zu installieren, um die Dinge sauber zu halten und den Stamm nicht zu überfrachten.
Milo
Meine Dateistruktur ist wahrscheinlich eine der ordentlichsten. home/usr/public_html/site1 home/usr/public_html/site2und so weiter und dann wp_content_dirist das normalerweise auf einer
cdn
Wenn nur eine WP-Installation vorhanden wäre, wäre das in Ordnung, aber ich arbeite hauptsächlich auf Servern anderer Leute, auf denen Hunderte von Dateien und Verzeichnissen verstreut sind.
Milo
Ist mein Verständnis korrekt, dass site_url () und home_url () identisch sind, es sei denn, man richtet ein anderes WordPress-Installationsverzeichnis als das Root-Verzeichnis ein?
Praveen
3

TLDR:

Bei einer nicht standardmäßigen Installation können Sie Ihre WordPress-Dateien in einem Unterverzeichnis Ihres Website-Stammverzeichnisses ablegen.
... und Ihren Besuchern weiterhin den Zugriff auf Ihre WordPress "Website" über die Domain (Root) URL Ihrer Site ermöglichen, ohne den Namen des Unterverzeichnisses anzufügen:
(dh: www.example.comvs www.example.com/wordpress):

WP function  | wp_options. | WP constant  | what it represents       | WP Settings Label | Example     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | WordPress files location | WordPress Address | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | browser address bar      | Site Address      | https://www.example.com 

Dabei hat der Wert für eine WP-Konstante Vorrang vor einem Wert für wp_options / WP Settings.

Unterschiedliche Konfigurationen für WordPress

In den meisten Standard- WordPress-Installationen home_urlund site_urlwird den gleichen Wert haben.
Unabhängig davon stehen sie für zwei verschiedene Dinge.

In einer nicht standardmäßigen Installation können sie unterschiedliche Werte haben.

HINWEIS: Ich lasse das Protokoll in meiner Antwort aus Gründen der besseren Lesbarkeit weg.
In diesem Beitrag PREPEND jede URL mit: https://, http://OR //
(wenn ich es nicht schon enthalten).

( //ist das relativeProtokoll und funktioniert für eines / beide http://oder https://)

Standardinstallationen (einschließlich "One-Click" -Installationen)

home_url: ist die Homepage Ihrer (WordPress-) Website, wie in der Adressleiste des Benutzers angegeben.
site_url: ist das Verzeichnis, in dem sich Ihre WordPress-Dateien befinden.

Bei der 5-minütigen Installation von WordPress werden WordPress-Dateien installiert. Diese beiden Werte sind identisch. WordPress-Dateien werden in demselben Ordner installiert, in dem die Benutzer Ihre Website oder den WordPress- (Blog-) Teil Ihrer Server-Website ansprechen sollen.

Beispiel 1: Der
Benutzer greift auf Ihr Blog zu unter : www.example.com, auf
WordPress-Dateien, die unter: installiert sind www.example.com, oder auf den Stammordner der Website Ihres Servers.

home_url=== site_url==="www.example.com"

Beispiel 2:
Benutzer greift auf Ihr Blog zu unter : www.example.com/blog,
WordPress-Dateien installiert unter: www.example.com/blogoder im blogOrdner im Stammverzeichnis Ihrer Website.

home_url=== site_url==="www.example.com/blog"

In diesem Fall www.example.comhandelt es sich um die Hauptwebsite und www.example.com/blogdas Stammverzeichnis Ihres Blogs.
Hier ist Ihr Blog von Ihrer Hauptwebsite getrennt und fungiert als Teilmenge dieser.
In diesem Fall wird Ihre Hauptwebsite nicht von WordPress gesteuert, definiert oder gestaltet.
Nur dein Blog ist. Alle URLs in Ihrem Blog werden von bearbeitetwww.example.com/blog

Hinweis: In der Dokumentation bezieht sich "Wordpress-Site / Website" (im Gegensatz zu "Site / Website") auf das Verzeichnis, in dem Ihre WordPress-Dateien installiert sind. In diesem Fall ist es www.example.com/blog- alles im blogOrdner. Die "WordPress-Website" ist in diesem Szenario nicht mit Ihrer Domain, Ihrem Root oder Ihrer Hauptwebsite identisch. Es ist eine Teilmenge Ihrer gesamten Website. Ein bisschen wie eine Website innerhalb einer Website. Ich erwähne dies, da die Terminologie angesichts dieses speziellen Aufbaus unklar oder verwirrend erscheinen kann.

Alternative WordPress-Installationskonfiguration

Geben Sie WordPress ein eigenes Verzeichnis , den Abschnitt Method II (With URL change).

Beispielsweise möchten viele Benutzer den Stammordner ihrer Website nicht mit allen WordPress-Dateien verstopfen.
Sie möchten WordPress in einem Unterverzeichnis * installieren, haben aber Zugriff auf das "Blog" oder die "WordPress-Website", als ob die Dateien im Stammverzeichnis des Servers für die Website installiert wären .

Dies gilt insbesondere dann, wenn WordPress zum Erstellen und Betreiben einer gesamten Website verwendet wird, die nicht einmal über ein "Blog" verfügt.

Beispiel 3:
Benutzer greift auf Ihre „Blog“ auf: www.example.com,
Wordpress Dateien installiert: www.example.com/wordpressoder den Stammordner Ihres Servers Webseite.

home_url=== "www.example.com"
site_url==="www.example.com/wordpress"

(Hinweis: Diese Konfiguration „out of the box“ nicht funktionieren wird nur durch die Werte dieser Variablen zu ändern Es erfordert zusätzliche Konfigurationsänderungen ordnungsgemäß funktioniert.)
Siehe Geben Wordpress ein eigenes Verzeichnis , den Abschnitt Method II (With URL change), wie dies zu tun.

In diesem Fall home_urlund site_urlsollten unterschiedliche Werte halten.

In diesem Setup mögen Sie Ihre Website funktionieren genau wie bei Wordpress - Dateien in dem Stammverzeichnis des Servers für Ihre Website installiert wurden ...
aber für organisatorische Zwecke auf dem Server,
Sie tatsächlich haben Ihre Wordpress - Dateien in einem Ordner mit dem Namen wordpressim Server Stammverzeichnis für Ihre Website.

Der Benutzer wird also www.example.comeingeben, um Ihre WordPress-Homepage zu erhalten, anstattwww.example.com/wordpress

WordPress-Funktion <-> Datenbankvariable <-> WordPress-Konstante

In diesem Abschnitt wird die Konfiguration von Beispiel 3 oben angenommen.
Adressleiste URL: www.example.com
WordPress-Dateien: / WordPress-Verzeichnis

(Die anderen Fälle sind trivial: Alle Variablen / Funktionen halten / geben den gleichen Wert zurück.)

So stellen Sie die Werte für site_urlund einhome_url

Lassen Sie mich zunächst das notieren siteurlund homedie von den obigen Funktionen zurückgegebenen Werte speichern

1) Normalerweise stellen Sie diese Werte im WordPress-Backend / Dashboard / Admin-Bereich ein:
Settings -> General ->
siteurl WordPress-Adresse: https://www.example.com/wordpress
home Site-Adresse: https://www.example.com

(hier keine abschließenden Schrägstriche einfügen - das wäre anderswo konfiguriert)

2) Alternativ setzen Sie diese Werte in Ihrer WordPress-Datenbank:
wp_optionsTabelle ->

`options_name` | `options_value`
----------------------------------------------------
`siteurl`      | `https://www.example.com/wordpress`  
`home`         | `https://www.example.com`  

(hier keine abschließenden Schrägstriche einfügen - das wäre anderswo konfiguriert)

3) Bearbeiten Sie Ihre wp-config.php
Definieren Sie diese spezifischen Konstanten , um Ihre Werte zu speichern.
Definieren Sie WP_HOMEund WP_SITEURLEinstellungen, indem Sie diese Zeilen am Anfang Ihrer wp-config.phpDatei einfügen :

define('WP_SITEURL','http://example.com/wordpress');  // wordpress core files
define('WP_HOME','http://example.com');               // address bar url

// ** MySQL settings - You can get this info from your web host ** //
...    

(hier keine abschließenden Schrägstriche einfügen - das wäre anderswo konfiguriert)

Referenz: WP_SITEURL und WP_HOME

HINWEIS: Dies ist verwirrend
(Ich wünschte wirklich, WordPress hätte die Einstellungen mit ähnlichen PHP-Namen
wie Wordpress Site Addressund Home Page Addressoder etwas expliziteren wie location of WordPress Site core filesund gekennzeichnet browser url to access WordPress home page)

`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Wordpress Address <--> /wordpress   
`WP_HOME`    <--> `home_url()` <--> `home`    <--> Site Address      <--> /

Hier wird es schwierig!

WENN Sie diese Konstanten in Ihrerwp-config.phpDatei definiert haben, spielt es keine Rolle, welche Werte Sie auf Ihrer Datenbank- / Einstellungsseite haben.
Tatsächlich können Sie diesen Wert nicht über das Back-End ändern (er wird ausgegraut). Sie können weiterhin Änderungen vornehmen, indem Sie Ihre Datenbank bearbeiten. Dies hat jedoch keine Auswirkungen auf Ihre Site, während die Konstanten in Ihrer WP-Konfigurationsdatei vorhanden sind.

Ihre Konfigurationsdatei ändert nicht die Werte in Ihrer Datenbank (oder folglich auf Ihrer Einstellungsseite). Stattdessen werden Ihre Datenbank- / Einstellungsseitenwerte ignoriert . Die Werte in wp-config überschreiben oder haben Vorrang vor Ihrer Datenbankeinstellung.

Also ... zum Abschluss (TLDR):

WP function  | wp_options. | WP constant  | what it represents       | WP Settings Label | Example     
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl`   | `WP_SITEURL` | WordPress files location | WordPress Address | https://www.example.com/wordpress
`home_url()` | `home`      | `WP_HOME`    | browser address bar      | Site Address      | https://www.example.com 

Dabei hat der Wert für eine WP-Konstante Vorrang vor einem Wert für wp_options / WP Settings.

Der wp_options-Datensatzwert und der WP-Einstellungswert sind identisch.
Wenn Sie eines bearbeiten, wird per Definition das andere bearbeitet.
Es gibt nur zwei Möglichkeiten, auf dieselbe Variable zuzugreifen.

Andererseits sind die WordPress-Konstanten einzigartig und unabhängig.
Intern überschreiben WordPress (PHP) -Konstanten ihre DB-Gegenstücke.
Wenn in wp-config eine Konstante definiert ist, wird die Datenbank nicht geändert.
Intern bevorzugt / verwendet WordPress jedoch immer den Wert anstelle des Werts db.

SherylHohman
quelle
3

Die Funktionen site_url()und home_url()sind ähnlich und können zu Unklarheiten in der Funktionsweise führen.

Die site_url()Funktion ruft den Wert für siteurlin der wp_optionsTabelle in Ihrer Datenbank ab.

Dies ist die URL zu den WordPress-Kerndateien.
Wenn Ihre Kerndateien in einem Unterverzeichnis /wordpressauf Ihrem Webserver vorhanden sind, lautet der Wert http://example.com/wordpress.

Die home_url()Funktion ruft den Wert für homein der wp_optionsTabelle in Ihrer Datenbank ab.

Dies ist die Adresse, die Benutzer zum Anzeigen Ihrer WordPress-Website besuchen sollen.

Wenn Ihre WordPress-Kerndateien in vorhanden sind /wordpress, aber Sie möchten, dass Ihre Website-URL http://example.comder Ausgangswert ist http://example.com.

Nanhe Kumar
quelle
2

So beantworten Sie Ihre zweite Frage:

F: Wenn das korrekt ist, kann ich WordPress dann dazu bringen, http://example.com/ zurückzugeben ?

Dies ist nicht möglich, es sei denn, Sie führen für Giving WordPress eigene Verzeichnisschritte aus . Wenn Sie dies verwenden, legen Sie die WordPress-Kerndateien in /blogoder /WordPressund dann index.phpin Ihrem Stammverzeichnis ab.

Wenn Sie Wordpress entscheiden innerhalb eines eigenen Verzeichnisses zu setzen , dann würden Sie home_url()für den Gang zum index.phpund site_url()für immer Core - Dateien und so weiter .

Verweise:
Codex für site_url
Codex für home_url
Codex für Wordpress Own Directory

xLRDxREVENGEx
quelle
-1

Verwenden Sie einfach den Backslash / , um die URL der Website ohne Unterverzeichnisse ( http://example.com/ anstelle von http://example.com/blog ) abzurufen .

Wenn Sie beispielsweise Folgendes eingeben:

<a href="/">domain url</a>

Es wird ein Link erstellt, der zu Ihrer Domain führt

jake
quelle
Vielen Dank für Ihre Teilnahme. Leider beantwortet dies nicht die vom OP gestellte Frage. Es gibt viele Gründe, warum eine Person die WordPress-Funktionen nutzen muss, nach denen OP fragt. Es ist unwahrscheinlich, dass OP einfach über HTML einen Link zu seiner Homepage hinzufügen möchte, z. B. durch Bearbeiten eines Posts. Es ist wahrscheinlicher, dass OP eine PHP-Themendatei oder eine Plugin-Datei bearbeitet. In jedem Fall arbeiten sie mit PHP, nicht mit HTML. Während OP auf einer anderen Site einen Wert ohne für diese Site erwartete , kann OP schließlich erwarten , dass ein Unterverzeichnis zurückgegeben wird. Dies hängt von der WP-Konfiguration für jeden Standort ab. /
SherylHohman