Qual è la differenza tra home_url() e site_url()
La mia comprensione è che site_url()
restituisce la posizione dove si trovano i file core di WordPress.
Se il mio blog è ospitato su http://example.com/blog
allora site_url()
restituisce http://example.com/blog
Ma allora in cosa differisce home_url()
? Per me, home_url()
restituisce la stessa cosa: http://example.com/blog
Se questo è corretto, posso far restituire a WordPress http://example.com/
?

Stai facendo due domande contemporaneamente:
- Qual è la differenza tra
home_url()
esite_url()
? - Come faccio a far restituire a WordPress l'URL root senza la sottodirectory in cui è installato?
Ecco le risposte, e ho confermato con Andrew Nacin, uno sviluppatore core di WordPress, oltre ad aver eseguito alcuni test sul server per verificare ciò che Andrew mi ha detto.
Domanda #1
In Generale > Impostazioni di wp-admin, home_url()
fa riferimento al campo etichettato "Indirizzo del sito (URL)". Confuso, vero? Sì, dice "Indirizzo del sito" quindi potresti pensare a site_url()
, ma ti sbaglieresti. Esegui il tuo test e lo vedrai. (Puoi temporaneamente inserire un campo echo H1
con i valori di site_url()
e home_url()
in cima al tuo functions.php del tema.)
Nel frattempo, site_url()
fa riferimento al campo etichettato "Indirizzo WordPress (URL)" in Generale > Impostazioni.
Quindi, se vuoi fare riferimento a un percorso fisico come chiamare il percorso della cartella di un plugin sull'URL per caricare un'immagine, o chiamare il percorso della cartella del tema per caricare un'immagine, dovresti effettivamente usare altre funzioni per questi - guarda plugins_url()
e get_template_directory_uri()
.
Il site_url()
sarà sempre la posizione dove puoi raggiungere il sito aggiungendo /wp-admin
alla fine, mentre home_url()
non sarebbe affidabilmente questa posizione.
Il home_url()
sarebbe dove hai impostato la tua homepage impostando il campo "Indirizzo del sito (URL)" in Generale > Impostazioni.
Domanda #2
Quindi, se ho posizionato il mio blog in http://example.com/blog
, e example.com
è solo un sito statico dove ho un tema portfolio, allora questo sarebbe uno scenario che si allinea con la tua domanda. In tal caso, userei questo snippet di codice:
<?php
function getDomain() {
$sURL = site_url(); // Funzione WordPress
$asParts = parse_url( $sURL ); // Funzione PHP
if ( ! $asParts )
wp_die( 'ERRORE: Percorso corrotto per il parsing.' ); // sostituisci questo con un risultato di errore migliore
$sScheme = $asParts['scheme'];
$nPort = $asParts['port'];
$sHost = $asParts['host'];
$nPort = 80 == $nPort ? '' : $nPort;
$nPort = 'https' == $sScheme AND 443 == $nPort ? '' : $nPort;
$sPort = ! empty( $nPort ) ? ":$nPort" : '';
$sReturn = $sScheme . '://' . $sHost . $sPort;
return $sReturn;
}

È avvenuta via email. Scusa. Ah, e grazie per la modifica -- ricorderò quel cambio di sintassi la prossima volta.

Mi ci è voluto molto tempo e molta sofferenza per capire che 'Indirizzo del sito (URL)' = 'home' e 'Indirizzo di WordPress (URL)' = 'siteurl'. Dovrebbero assolutamente cambiare quelle etichette.

Sembra ci sia un errore di battitura in $sPort = ! empty( $sPort ) ? ":$nPort" : '';
. Penso che ! empty( $sPort )
dovrebbe essere ! empty( $nPort )
. Altrimenti, ":$nPort"
non verrà mai raggiunto, quindi $sPort = ''
e una porta non verrà mai aggiunta alla terzultima riga.

##TLDR:
In un'installazione non standard, puoi posizionare i tuoi file WordPress in una sottocartella della root del tuo sito web.
...e comunque permettere ai visitatori di accedere al tuo "sito" WordPress dal dominio (root) del tuo sito, senza dover aggiungere il nome della sottocartella:
(es: www.example.com
vs www.example.com/wordpress
):
Funzione WP | wp_options. | Costante WP | cosa rappresenta | Etichetta Impostazioni WP | Esempio
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl` | `WP_SITEURL` | Posizione file WordPress | Indirizzo WordPress | https://www.example.com/wordpress
`home_url()` | `home` | `WP_HOME` | Barra indirizzi browser | Indirizzo del Sito | https://www.example.com
Dove il valore di una costante WP ha la precedenza su un valore wp_options/Impostazioni WP.
##Configurazioni Diverse per WordPress
Nelle installazioni WordPress più standard, home_url
e site_url
avranno lo stesso valore.
In ogni caso, rappresentano due cose diverse.
In un'installazione non standard, possono avere valori diversi.
NOTA: Ometto il protocollo nella mia risposta per una migliore leggibilità.
In questo post, AGGIUNGI AD OGNI URL:https://
,http://
OPPURE//
(a meno che non l'abbia già incluso).
(//
è il protocollo relativo
e funzionerà sia per http://
che per https://
)
Installazioni Standard (inclusi gli installatori "One-Click")
home_url
: è la home page del tuo sito (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 imposterà questi due valori allo stesso modo - i file wordpress verranno installati nella stessa cartella che desideri che le persone utilizzino per accedere al tuo sito, o la parte wordpress (blog) del sito web del tuo server.
Esempio 1:
l'utente accede al tuo blog all'indirizzo: www.example.com
,
file wordpress installati in: www.example.com
, o nella cartella root del sito web del tuo server.
home_url
=== site_url
=== "www.example.com"
Esempio 2:
l'utente accede al tuo blog all'indirizzo: www.example.com/blog
,
file wordpress installati in: www.example.com/blog
, o nella cartella blog
all'interno della root del tuo sito web.
home_url
=== site_url
=== "www.example.com/blog"
In questo caso www.example.com
è il sito web principale, e www.example.com/blog
è la root 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 stilizzato da WordPress.
Solo il tuo blog lo è. Tutti gli URL nel tuo blog saranno preceduti da www.example.com/blog
Nota: Nella documentazione, "sito/website WordPress" (al contrario di semplicemente "sito/website") si riferisce alla directory in cui sono installati i tuoi file WordPress. In questo caso, è www.example.com/blog
- tutto all'interno della cartella blog
. Il "sito WordPress", in questo scenario, non è lo stesso del tuo dominio, della tua root o del tuo sito web principale. È un sottoinsieme del tuo sito web complessivo. Un po' come un sito web dentro un sito web. Lo menziono perché la terminologia può sembrare poco chiara o confusa, dato questo particolare setup.
Configurazione Alternativa di Installazione WordPress
Assegnare a WordPress la sua Cartella, la sezione Metodo II (Con Cambio URL)
.
Per esempio, molte persone non vogliono intasare la cartella root del loro sito con tutti i file wordpress.
Vogliono installare wordpress in una sottocartella, *ma avere il "blog" o "sito WordPress" accessibile come se i file fossero installati nella root del sito web del server.
Questo è particolarmente vero quando WordPress viene utilizzato per costruire e gestire un intero sito web che non ha nemmeno un "blog".
Esempio 3:
l'utente accede al tuo "blog" all'indirizzo: www.example.com
,
file wordpress installati in: www.example.com/wordpress
, o nella cartella root del sito web del tuo server.
home_url
=== "www.example.com"
site_url
=== "www.example.com/wordpress"
(Nota: questa configurazione non funzionerà "fuori dalla scatola" semplicemente cambiando i valori di queste variabili. Richiede ulteriori modifiche di configurazione per funzionare correttamente)
Vedi Assegnare a WordPress la sua Cartella, la sezione intitolata Metodo II (Con Cambio URL)
per come fare questo.
In questo caso home_url
e site_url
dovrebbero contenere valori diversi.
In questo setup, vuoi che il tuo sito funzioni esattamente come se i file WordPress fossero installati nella directory root del server per il tuo sito...
MA, per motivi organizzativi sul server,
hai effettivamente i tuoi file WordPress in una cartella chiamata wordpress
nella directory root del server per il tuo sito web.
Quindi, l'utente digiterà www.example.com
per ottenere la tua home page WordPress, invece di www.example.com/wordpress
funzione wordpress <--> variabile database <--> Costante WordPress
Questa sezione assume la configurazione dell'Esempio 3 sopra.
url barra indirizzi: www.example.com
file wordpress: directory /wordpress
(Gli altri casi sono banali: Tutte le variabili/funzioni hanno/restituiscono lo stesso valore.)
Come impostare i valori per site_url
e home_url
Prima di tutto, permettimi di notare che siteurl
e home
memorizzano i valori restituiti dalle funzioni sopra
- Normalmente imposti questi valori nel backend/pannello di amministrazione di WordPress:
Impostazioni -> Generali ->
siteurl
Indirizzo WordPress:https://www.example.com/wordpress
home
Indirizzo del Sito:https://www.example.com
(non includere slash finali qui - quello sarebbe configurato altrove)
In alternativa, puoi impostare questi valori nel tuo database WordPress:
tabellawp_options
->options_name
|options_value
siteurl
|https://www.example.com/wordpress
home
|https://www.example.com
(non includere slash finali qui - quello sarebbe configurato altrove)
Modifica il tuo
wp-config.php
Definisci queste specifiche costanti per contenere i tuoi valori
Definisci le impostazioniWP_HOME
eWP_SITEURL
inserendo queste linee verso l'alto del tuo filewp-config.php
:define('WP_SITEURL','http://example.com/wordpress'); // file core wordpress define('WP_HOME','http://example.com'); // url barra indirizzi
// ** Impostazioni MySQL - Puoi ottenere queste informazioni dal tuo web host ** // ...
(non includere slash finali qui - quello sarebbe configurato altrove)
Riferimento: WP_SITEURL e WP_HOME
NOTA: Questo è confuso
(Davvero vorrei che WordPress avesse etichettato le impostazioni in modo simile ai loro nomi php,
come Indirizzo Sito WordPress
e Indirizzo Home Page
o qualcosa di più esplicito come posizione file core sito WordPress
e url browser per accedere alla home page WordPress
)
`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Indirizzo WordPress <--> /wordpress
`WP_HOME` <--> `home_url()` <--> `home` <--> Indirizzo del Sito <--> /
Ora Qui è dove diventa complicato !
SE hai definito quelle costanti nel tuo file wp-config.php
, non importa quali valori hai nel tuo database/pagina delle impostazioni.
Infatti, non sarai in grado di modificare questo valore dal backend (sarà disattivato). Puoi ancora modificarlo modificando il tuo database, ma farlo non avrà alcun effetto sul tuo sito, fintanto che le costanti esistono nel tuo file wp-config.
Il tuo file di configurazione non cambierà i valori nel tuo database (e quindi nella tua pagina delle impostazioni). Invece, i valori nel database/pagina delle impostazioni verranno ignorati. I valori in wp-config sovrascrivono o hanno la precedenza sulle impostazioni del database.
#Quindi... per riassumere (TLDR) :
Funzione WP | wp_options. | Costante WP | cosa rappresenta | Etichetta Impostazioni WP | Esempio
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl` | `WP_SITEURL` | Posizione file WordPress | Indirizzo WordPress | https://www.example.com/wordpress
`home_url()` | `home` | `WP_HOME` | Barra indirizzi browser | Indirizzo del Sito | https://www.example.com
Dove il valore di una costante WP ha la precedenza su un valore wp_options/Impostazioni WP.
Il valore del record wp_options e il valore delle Impostazioni WP sono lo stesso.
Modificando uno, per definizione modifichi l'altro.
È solo 2 modi diversi di accedere alla stessa variabile.
D'altra parte, le Costanti WordPress sono uniche e indipendenti.
Internamente, le costanti WordPress (PHP) sovrascrivono le loro controparti nel db.
Se una costante è definita in wp-config, non cambia il database.
Ma internamente WordPress preferirà/utilizzerà sempre il suo valore invece di quello nel db.

Se desideri installare WordPress in una directory ma far sì che la home del sito sia nella radice del tuo dominio, devi spostare il file index.php principale nella radice del dominio e modificare l'istruzione require per puntare all'interno della tua directory.
Questo processo è descritto qui: Assegnare a WordPress la sua directory personale.

Io uso sempre home_url()
visto che sono in modalità rete wp. Ho dato a WordPress la sua directory solo una volta e non mi è piaciuto. Tuttavia, uso wp_content_dir
su alcuni siti.

Non ho esperienza con multisite, quindi non so come funzioni in quella situazione. Preferisco installare WP in una directory per mantenere le cose ordinate e non ingombrare la root.

la mia struttura dei file è probabilmente una delle più ordinate in circolazione. home/usr/public_html/site1
home/usr/public_html/site2
e così via e poi wp_content_dir
di solito è su un cdn

se fosse presente solo un'installazione di WP andrebbe bene, ma per lo più lavoro su server di altre persone con centinaia di file e directory sparsi ovunque.

Le funzioni site_url()
e home_url()
sono simili e possono creare confusione sul loro funzionamento.
La funzione site_url()
recupera il valore di siteurl
nella tabella wp_options
del tuo database.
Questo è l'URL che punta ai file core di WordPress.
Se i tuoi file core si trovano in una sottodirectory /wordpress
sul tuo server web, il valore sarà http://example.com/wordpress
.
La funzione home_url()
recupera il valore di home
nella tabella wp_options
del tuo database.
Questo è l'indirizzo che vuoi che le persone visitino per vedere il tuo sito WordPress.
Se i file core di WordPress si trovano in /wordpress
, ma vuoi che l'URL del tuo sito sia http://example.com
, il valore di home dovrebbe essere http://example.com
.

Per rispondere alla tua seconda domanda:
Q: Se è corretto, posso fare in modo che WordPress restituisca http://example.com/ ?
Non puoi, a meno che non segui i passaggi di Assegnare a WordPress la sua propria directory. Utilizzando questo metodo significa che posizioni i file core di WordPress in /blog
o /WordPress
e poi l'index.php
nella tua root.
Se decidi di posizionare WordPress all'interno della sua propria directory, allora utilizzerai home_url()
per accedere all'index.php
e site_url()
per ottenere i file core e simili.
Riferimenti:
Codex per site_url
Codex per home_url
Codex per Assegnare a WordPress la sua Directory

La tua prima domanda ha ricevuto risposta, ma penso che il modo più semplice per recuperare il dominio principale sia con la funzione bloginfo('url'); inoltre, bloginfo() ha altri parametri che può restituire, controlla la documentazione.
Esiste anche get_bloginfo() da verificare se vuoi inserire il contenuto in una variabile.

Anche se questo collegamento potrebbe rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte composte solo da collegamenti possono diventare non valide se la pagina collegata cambia. - Dalla Revisione

Il modo più semplice per ottenere l'URL del sito senza alcuna sottocartella ( http://example.com/ invece di http://example.com/blog ), basta usare la barra rovesciata /
Ad esempio, se digiti:
<a href="/">URL del dominio</a>
Questo creerà un collegamento che punta al tuo dominio

Grazie per la partecipazione. Purtroppo, questo non risponde alla domanda posta dall'OP. Ci sono molte ragioni per cui una persona potrebbe aver bisogno di utilizzare le funzioni di WordPress menzionate dall'OP. È improbabile che l'OP voglia semplicemente aggiungere un link alla propria home page tramite HTML, ad esempio modificando un post. È più probabile che l'OP stia modificando un file PHP del tema o di un plugin. In ogni caso, sta lavorando con PHP, non con HTML. Infine, mentre l'OP si aspettava un valore senza /
per questo sito, su un sito diverso, l'OP potrebbe aspettarsi che venga restituita una sottodirectory. Dipende dalla configurazione di WP per ciascun sito.
