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

17 giu 2011, 21:07:10
Visualizzazioni: 161K
Voti: 93

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/?

2
Commenti

Stai ponendo due domande contemporaneamente su una questione molto importante. La risposta a "Qual è la differenza tra home_url() e site_url()?" è diversa dalla domanda "Come faccio a far sì che WordPress restituisca la radice dell'URL senza la sottodirectory in cui è installato?"

Volomike Volomike
30 apr 2012 02:33:53
Tutte le risposte alla domanda 7
6
78

Stai facendo due domande contemporaneamente:

  1. Qual è la differenza tra home_url() e site_url()?
  2. 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;
}
30 apr 2012 03:54:56
Commenti

Hai un link alla discussione con A.Nacin?

kaiser kaiser
30 apr 2012 04:02:35

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

Volomike Volomike
30 apr 2012 05:07:21

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.

Jbm Jbm
26 gen 2014 05:33:53

La tua risposta alla seconda domanda ha centrato il bersaglio!

Devner Devner
19 feb 2018 10:08:58

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.

Ferris Ferris
26 mag 2023 00:30:49

@Ferris hai ragione e l'ho modificato. Grazie.

Volomike Volomike
30 mag 2023 06:41:55
Mostra i restanti 1 commenti
0
35

##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

  1. 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)

  1. In alternativa, puoi impostare questi valori nel tuo database WordPress:
    tabella wp_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)

  1. Modifica il tuo wp-config.php
    Definisci queste specifiche costanti per contenere i tuoi valori
    Definisci le impostazioni WP_HOME e WP_SITEURL inserendo queste linee verso l'alto del tuo file wp-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.

5 gen 2019 00:44:14
5

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.

17 giu 2011 21:12:30
Commenti

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.

xLRDxREVENGEx xLRDxREVENGEx
17 giu 2011 21:29:04

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.

Milo Milo
17 giu 2011 21:34:07

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

xLRDxREVENGEx xLRDxREVENGEx
17 giu 2011 21:39:11

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.

Milo Milo
17 giu 2011 21:46:01

La mia comprensione è corretta che site_url() e home_url() sono la stessa cosa, a meno che non si configuri la directory di installazione di WordPress in modo diverso dalla root?

Praveen Praveen
20 giu 2011 22:00:52
0

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.

17 apr 2013 10:41:34
0

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

17 giu 2011 21:37:10
1

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.

10 ott 2023 20:46:19
Commenti

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

cjbj cjbj
14 ott 2023 12:45:50
1
-1

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

5 mag 2016 12:12:41
Commenti

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.

SherylHohman SherylHohman
5 gen 2019 04:12:55