Qual è la differenza tra home_url () e site_url ()


65

La mia comprensione è che site_url()restituisce la posizione in cui si trovano i file core di wordpress.

Quindi, se il mio blog è ospitato su http://example.com/blogallora site_url()ritornahttp://example.com/blog

Ma allora in cosa home_url()differisce? Per me, home_url()restituisce la stessa cosa:http://example.com/blog

Se è corretto, allora posso ottenere wordpress per tornare http://example.com/?


4
Stai ponendo due domande contemporaneamente su una domanda molto importante. La risposta a "Qual è la differenza tra home_url () e site_url ()?" è diverso dalla domanda "Come posso ottenere WordPress per restituire la radice dell'URL senza la sottodirectory in cui è installata?"
Volomike,

Risposte:


51

Stai ponendo due domande contemporaneamente:

  1. Qual è la differenza tra home_url()e site_url()?
  2. Come posso ottenere WordPress per restituire l'URL root senza la sottodirectory in cui è installato?

Ecco le risposte, e ho confermato con Andrew Nacin, uno sviluppatore principale di WordPress, nonché eseguito alcuni test del server per confermare ciò che Andrew mi ha detto.

Domanda 1

In Generale> Impostazioni di wp-admin, fa home_url()riferimento al campo "Indirizzo sito (URL)". Confuso, eh? Sì, dice "Indirizzo sito", quindi potresti presumere site_url(), ma ti sbaglieresti . Esegui il tuo test e vedrai. (Puoi rilasciare temporaneamente un echo H1campo con site_url()e home_url()valori nella parte superiore delle funzioni del tuo tema.)

Nel frattempo, fa site_url()riferimento al campo "Indirizzo WordPress (URL)" in Generale> Impostazioni.

Quindi, se vuoi fare riferimento a dove potrebbe essere un percorso fisico come chiamare il percorso di una cartella del plugin sull'URL per caricare un'immagine o chiamare il percorso della cartella di un tema per caricare un'immagine, dovresti effettivamente utilizzare altre funzioni per quelle - guarda plugins_url()e get_template_directory_uri().

Il site_url()sarà sempre la posizione in cui è possibile raggiungere il sito virando su /wp-adminalla fine, mentre home_url()non sarebbe affidabile questa posizione.

È home_url()dove hai impostato la tua home page impostando il campo Generale> Impostazioni "Indirizzo sito (URL)".

Domanda 2

Quindi, se ho inserito il mio blog http://example.com/bloged example.comè solo un sito statico in cui ho un tema di portfolio, questo sarebbe uno scenario in linea con la tua domanda. In tal caso, utilizzerei questo frammento di codice:

<?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;
}

Hai un link alla discussione con A.Nacin?
Kaiser

1
Era via e-mail. Scusate. Oh, e grazie per la modifica, ricorderò che la sintassi cambierà la prossima volta.
Volomike,

8
Mi ci è voluto molto tempo e molto dolore per capire che 'Indirizzo sito (URL)' = 'home' e 'Indirizzo WordPress (URL)' = 'siteurl'. Dovrebbero assolutamente cambiare quelle etichette.
Jbm

La tua risposta alla seconda domanda colpisce il jackpot!
Devner,

7

Se vuoi che WP sia installato in una directory ma nella home del sito nella tua radice del dominio, devi spostare il file index.php principale nella tua radice del dominio e modificare l'istruzione request in modo che punti nella tua directory.

Questo processo è delineato qui: Dare a WordPress la propria directory .


Uso sempre home_url()dato che sono in modalità rete wp. Ho dato a WordPress la sua directory una sola volta e non mi è piaciuto. Ma io uso comunque wp_content_dirsu alcuni siti.
xLRDxREVENGEx il

Non ho alcuna esperienza con il multisito, quindi non ho familiarità con il modo in cui questa roba funziona in quella situazione. Preferisco installare WP in una directory solo per mantenere le cose pulite e non ingombrare la radice.
Milo,

la mia struttura di file è probabilmente una delle più pulite in circolazione. home/usr/public_html/site1 home/usr/public_html/site2e così via e poi di wp_content_dirsolito è su un cdn
xLRDxREVENGEx il

se un'installazione WP fosse l'unica cosa lì, andrebbe bene, ma sto lavorando principalmente su server di altre persone con centinaia di file e directory disseminati.
Milo,

La mia comprensione è corretta che site_url () e home_url () sono uguali, a meno che non si imposti la directory di installazione di wordpress in modo che sia diversa dalla radice?
Praveen,

3

TLDR:

In un'installazione non standard, puoi posizionare i tuoi file WordPress in una sottodirectory della radice del tuo sito web.
... e consenti comunque ai tuoi visitatori di accedere al tuo "sito Web" WordPress dall'URL del dominio (root) del tuo sito, senza aggiungere il nome della sottodirectory:
(ovvero: 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 

Dove il valore per una costante WP ha la precedenza su un valore wp_options / WP Settings.

Diverse configurazioni per WordPress

Nelle installazioni più standard di WordPress, home_urle site_urlavrà lo stesso valore.
Indipendentemente da ciò, rappresentano due cose diverse.

In un'installazione non standard , possono avere valori diversi.

NOTA: sto lasciando fuori il protocollo nella mia risposta per una più facile leggibilità.
In questo post, anteporre OGNI URL con: https://, http://OR //
(a meno che non ho incluso già).

( //è il relativeprotocollo e funzionerà per entrambi / entrambi http://o https://)

Installazioni standard (comprese le installazioni "One-Click")

home_url: è la home page del tuo sito Web (wordpress), come indicato nella barra degli indirizzi dell'utente.
site_url: è la directory in cui si trovano i tuoi file wordpress.

L'installazione in 5 minuti di WordPress installa i file wordpress questi due valori saranno gli stessi: i file wordpress verranno installati nella stessa cartella che si desidera utilizzare per indirizzare il proprio sito Web o la porzione di wordpress (blog) del sito Web del proprio server.

Esempio 1:
utente accede al tuo blog: www.example.com,
file di WordPress installati presso: www.example.como la cartella principale del sito web del server.

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

Esempio 2:
utente accede al tuo blog: www.example.com/blog,
file di WordPress installato in: www.example.com/blogo nella blogcartella all'interno della directory principale del tuo sito web.

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

In questo caso www.example.comè il sito Web principale ed www.example.com/blogè la radice del tuo blog.
Qui il tuo blog è separato e funziona come sottoinsieme del tuo sito Web principale.
In questo caso, il tuo sito Web principale non è controllato, definito o disegnato da WordPress.
Lo è solo il tuo blog. Tutti gli URL nel tuo blog saranno seguiti dawww.example.com/blog

Nota: nella documentazione, "sito / sito Web Wordpress" (anziché semplicemente "sito / sito Web") si riferisce alla directory in cui sono installati i file di WordPress. In questo caso, lo è www.example.com/blog- tutto all'interno della blogcartella. Il "sito Web WordPress", in questo scenario, non è uguale al tuo dominio, alla tua radice o al tuo sito Web principale. È un sottoinsieme dell'intero sito Web. Un po 'come un sito Web all'interno di un sito Web. Lo dico in quanto la terminologia può sembrare poco chiara o confusa, data questa particolare configurazione.

Configurazione alternativa per l'installazione di WordPress

Dare a WordPress la propria directory , la sezione Method II (With URL change).

Ad esempio, molte persone non vogliono intasare la cartella principale del proprio sito Web con tutti i file wordpress.
Vogliono installare wordpress in una sottodirectory *, ma hanno accesso al "blog" o al "sito Web WordPress" come se i file fossero installati nella radice della radice del server per il sito Web.

Ciò è particolarmente vero quando WordPress viene utilizzato per creare ed eseguire un intero sito Web che non ha nemmeno un "blog".

Esempio 3:
utente accede tuo "blog" in: www.example.com,
file di WordPress installati presso: www.example.com/wordpresso la cartella principale del sito web del server.

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

(Nota: questa configurazione non funzionerà "out of the box" solo cambiando i valori di queste variabili. Richiede ulteriori modifiche alla configurazione per funzionare correttamente)
Vedi Dare a WordPress la propria directory , la sezione intitolata Method II (With URL change)per come fare questo.

In questo caso home_urle site_urldovrebbe contenere valori diversi.

In questa configurazione, vuoi che il tuo sito Web funzioni esattamente come se i file WordPress fossero installati nella directory principale del server per il tuo sito Web ...
MA, per scopi organizzativi sul server,
hai effettivamente i tuoi file WordPress in una cartella chiamata wordpressnel server directory principale per il tuo sito Web.

Quindi, l'utente digiterà www.example.comper ottenere la tua home page di WordPress, invece diwww.example.com/wordpress

funzione wordpress <--> variabile di database <--> costante di Wordpress

Questa sezione presuppone la configurazione dell'esempio 3 sopra.
URL della barra degli indirizzi: www.example.com
file wordpress: / directory wordpress

(Gli altri casi sono banali: tutte le variabili / funzioni mantengono / restituiscono lo stesso valore.)

Come impostare i valori per site_urlehome_url

Per prima cosa, vorrei sottolineare che siteurle homememorizzare i valori restituiti dalle funzioni sopra

1) Normalmente si impostano questi valori nel pannello backend / dashboard / admin di
Settings -> General ->
siteurl WordPress: Indirizzo WordPress: https://www.example.com/wordpress
home Indirizzo sito: https://www.example.com

(non includere le barre finali qui - che sarebbero configurate altrove)

2) In alternativa, puoi impostare questi valori nel tuo database WordPress:
wp_optionstabella ->

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

(non includere le barre finali qui - che sarebbero configurate altrove)

3) Modifica il tuo wp-config.php
Definisci queste costanti specifiche per contenere i tuoi valori
Definisci WP_HOMEe WP_SITEURLimpostazioni inserendo queste righe nella parte superiore del tuo wp-config.phpfile:

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 ** //
...    

(non includere le barre finali qui - che sarebbero configurate altrove)

Riferimento: WP_SITEURL e WP_HOME

NOTA: Questo è confuso
(vorrei davvero che WordPress avesse etichettato le impostazioni simili ai loro nomi php,
come Wordpress Site Addresse Home Page Addresso qualcosa di più esplicito come location of WordPress Site core filese browser url to access WordPress home page)

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

Ora qui è dove diventa complicato!

Se hai definito quelle costanti nel tuowp-config.phpfile, non importa quali valori hai nel tuo database / pagina delle impostazioni.
In effetti, non sarai in grado di modificare questo valore attraverso il back-end (sarà disattivato). Puoi comunque modificare modificando il tuo database, ma farlo non avrà alcun effetto sul tuo sito, mentre le costanti esistono nel tuo file wp-config.

Il file di configurazione non modificherà i valori nel database (o quindi nella pagina delle impostazioni). Invece, i valori della pagina del database / delle impostazioni verranno ignorati . I valori in wp-config hanno la precedenza o hanno la precedenza sulle impostazioni del database.

Quindi ... per concludere (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 

Dove il valore per una costante WP ha la precedenza su un valore wp_options / WP Settings.

Il valore del record wp_options e il valore delle impostazioni WP sono gli stessi.
Modificarne uno, per definizione, modifica l'altro.
Sono solo 2 modi diversi di accedere alla stessa variabile.

D'altra parte, le Costanti di WordPress sono uniche e indipendenti.
Internamente, le costanti di WordPress (PHP) prevalgono sulle loro controparti db.
Se una costante è definita in wp-config, non cambia il database.
Ma internamente WordPress preferirà / userà sempre il suo valore anziché quello di db.


3

Le funzioni site_url()e home_url()sono simili e possono creare confusione nel modo in cui funzionano.

La site_url()funzione recupera il valore valore per siteurlnella wp_optionstabella nel database.

Questo è l'URL dei file core di WordPress.
Se i tuoi file core esistono in una sottodirectory /wordpressdel tuo server web, il valore sarebbe http://example.com/wordpress.

La home_url()funzione recupera il valore per homenella wp_optionstabella nel database.

Questo è l'indirizzo che vuoi che le persone visitino per visualizzare il tuo sito Web WordPress.

Se i tuoi file core di WordPress esistono /wordpress, ma vuoi che l'URL del tuo sito web sia http://example.comil valore home dovrebbe essere http://example.com.


2

Per rispondere alla tua seconda domanda:

D: Se è corretto, allora posso ottenere wordpress per restituire http://example.com/ ?

Non puoi, a meno che tu non dia a WordPress i suoi passi di directory . Usando questo significa che inserisci i file core di WordPress nel /blogo /WordPresse poi index.phpnel tuo root.

Se decidi di inserire WordPress nella sua directory, lo utilizzeresti home_url()per andare su index.phpe site_url()per ottenere file core e simili.

Riferimenti:
Codice per site_url
Codice per home_url
Codice per dare a Wordpress la propria directory


-1

Il modo più semplice per ottenere l'URL del sito senza alcuna sottodirectory ( http://example.com/ anziché http://example.com/blog ), basta usare la barra rovesciata /

Ad esempio, se si digita:

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

Creerà un collegamento che va al tuo dominio


Grazie per aver partecipato. Purtroppo, ciò non risponde alla domanda posta dal PO. Ci sono molte ragioni per cui una persona ha bisogno di usare le funzioni wordpress di cui chiede OP. È improbabile che OP voglia semplicemente aggiungere un link alla loro home page tramite HTML, ad esempio modificando un post. È più probabile che OP stia modificando un file di temi php o un file plugin. In ogni caso, stanno lavorando con PHP, non HTML. Infine, mentre OP prevedeva un valore senza /per questo sito, su un sito diverso, OP potrebbe aspettarsi che venga restituita una sottodirectory. Dipende dalla configurazione WP per ciascun sito.
SherylHohman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.