Care este diferența dintre home_url() și site_url()
Din câte înțeleg eu, site_url()
returnează locația unde sunt stocate fișierele principale WordPress.
Dacă blogul meu este găzduit la http://example.com/blog
atunci site_url()
returnează http://example.com/blog
Dar atunci cum diferă home_url()
? Pentru mine, home_url()
returnează același lucru: http://example.com/blog
Dacă acest lucru este corect, pot face ca WordPress să returneze http://example.com/
?
Ai pus două întrebări simultan:
- Care este diferența dintre
home_url()
șisite_url()
? - Cum pot obține din WordPress URL-ul rădăcină fără subdirectorul în care este instalat?
Iată răspunsurile, pe care le-am confirmat cu Andrew Nacin, un dezvoltator de bază al WordPress, precum și prin teste pe server pentru a verifica informațiile primite.
Întrebarea #1
În secțiunea General > Setări din wp-admin, home_url()
se referă la câmpul denumit "Adresa site-ului (URL)". Confuz, nu-i așa? Da, scrie "Adresa site-ului" așa că ai putea presupune că e vorba de site_url()
, dar te-ai înșelat. Poți face propriul test și vei vedea. (Poți adăuga temporar un câmp echo H1
cu valorile site_url()
și home_url()
în partea de sus a fișierului functions.php al temei tale.)
În schimb, site_url()
se referă la câmpul denumit "Adresa WordPress (URL)" din General > Setări.
Așadar, dacă vrei să faci referire la o cale fizică, cum ar fi apelarea căii unui plugin pentru încărcarea unei imagini, sau căii unei teme pentru încărcarea unei imagini, ar trebui să folosești alte funcții pentru acestea - uită-te la plugins_url()
și get_template_directory_uri()
.
Funcția site_url()
va fi întotdeauna locația unde poți accesa site-ul adăugând /wp-admin
la sfârșit, în timp ce home_url()
nu va fi întotdeauna această locație.
Funcția home_url()
va fi locația pe care ai setat-o pentru pagina principală prin câmpul "Adresa site-ului (URL)" din General > Setări.
Întrebarea #2
Deci, dacă am plasat blogul meu în http://exemplu.ro/blog
, iar exemplu.ro
este doar un site static unde am o temă de portofoliu, atunci acesta ar fi un scenariu care se potrivește cu întrebarea ta. Într-un astfel de caz, aș folosi următorul fragment de cod:
<?php
function getDomain() {
$sURL = site_url(); // Funcție WordPress
$asParts = parse_url( $sURL ); // Funcție PHP
if ( ! $asParts )
wp_die( 'EROARE: Calea este coruptă pentru parsare.' ); // înlocuiește cu un mesaj de eroare mai bun
$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;
}

A fost prin email. Scuze. A, și mulțumesc pentru editare - o să țin minte această modificare de sintaxă data viitoare.

Mi-a luat foarte mult timp și multă suferință să realizez că 'Adresa site-ului (URL)' = 'home' și 'Adresa WordPress (URL)' = 'siteurl'. Ar trebui să schimbe cu siguranță acele etichete.

Se pare că există o greșeală de scriere în $sPort = ! empty( $sPort ) ? ":$nPort" : '';
. Cred că ! empty( $sPort )
ar trebui să fie ! empty( $nPort )
. Altfel, ":$nPort"
nu va fi niciodată atins, deci $sPort = ''
și un port nu va fi niciodată adăugat la a treia linie de la sfârșit.

##TLDR:
Într-o instalare non-standard, puteți plasa fișierele WordPress într-un subdirector al directorului rădăcină al site-ului.
...și totuși permiteți vizitatorilor să acceseze "site-ul" WordPress de la URL-ul domeniului (rădăcină) al site-ului, fără a adăuga numele subdirectorului:
(de exemplu: www.example.com
vs www.example.com/wordpress
):
Funcție WP | wp_options. | Constanță WP | ce reprezintă | Etichetă Setări WP | Exemplu
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl` | `WP_SITEURL` | Locația fișierelor WordPress | Adresa WordPress | https://www.example.com/wordpress
`home_url()` | `home` | `WP_HOME` | bara de adrese din browser | Adresa Site-ului | https://www.example.com
Unde valoarea pentru o constantă WP are prioritate față de o valoare din wp_options/Setări WP.
##Diferite Configurări pentru WordPress
În cele mai standard instalări WordPress, home_url
și site_url
vor avea aceeași valoare.
Indiferent, ele reprezintă două lucruri diferite.
Într-o instalare non-standard, acestea pot avea valori diferite.
NOTĂ: Omit protocolul în răspunsul meu pentru o lizibilitate mai bună.
În acest post, ADĂUGAȚI ÎN FAȚA FIECĂRUI URL:https://
,http://
SAU//
(dacă nu l-am inclus deja).
(//
este protocolul relativ
și va funcționa pentru http://
sau https://
)
Instalări Standard (inclusiv Instalările "One-Click")
home_url
: este pagina principală a site-ului dvs. (WordPress), așa cum apare în bara de adrese a utilizatorului.
site_url
: este directorul în care sunt situate fișierele WordPress.
Instalarea WordPress de 5 minute va seta aceste două valori la fel - fișierele WordPress vor fi instalate în același folder pe care doriți să-l folosiți pentru a accesa site-ul, sau partea de blog a site-ului serverului.
Exemplu 1:
utilizatorul accesează blogul la: www.example.com
,
fișierele WordPress instalate la: www.example.com
, sau folderul rădăcină al site-ului serverului.
home_url
=== site_url
=== "www.example.com"
Exemplu 2:
utilizatorul accesează blogul la: www.example.com/blog
,
fișierele WordPress instalate la: www.example.com/blog
, sau în folderul blog
din rădăcina site-ului.
home_url
=== site_url
=== "www.example.com/blog"
În acest caz www.example.com
este site-ul principal, iar www.example.com/blog
este rădăcina blogului.
Aici blogul este separat și funcționează ca o parte a site-ului principal.
În acest caz, site-ul principal nu este controlat, definit sau stilizat de WordPress.
Doar blogul este. Toate URL-urile din blog vor fi precedate de www.example.com/blog
Notă: În documentație, "site/website WordPress" (spre deosebire de simplul "site/website") se referă la directorul în care sunt instalate fișierele WordPress. În acest caz, este www.example.com/blog
- tot ce este în folderul blog
. "Site-ul WordPress", în acest scenariu, nu este același cu domeniul, rădăcina sau site-ul principal. Este o parte a întregului site. Un fel de site în interiorul unui site. Menționez acest lucru deoarece terminologia poate părea neclară sau confuză, având în vedere această configurație particulară.
Configurație Alternativă de Instalare WordPress
Dându-i WordPress propriul director, secțiunea Metoda II (Cu schimbare de URL)
.
De exemplu, mulți oameni nu doresc să încarce folderul rădăcină al site-ului cu toate fișierele WordPress.
Doresc să instaleze WordPress într-un subdirector, *dar să aibă "blogul" sau "site-ul WordPress" accesat ca și cum fișierele ar fi fost instalate în rădăcina serverului pentru site.
Acest lucru este valabil mai ales atunci când WordPress este folosit pentru a construi și rula un întreg site care nu are nici măcar un "blog".
Exemplu 3:
utilizatorul accesează "blogul" la: www.example.com
,
fișierele WordPress instalate la: www.example.com/wordpress
, sau folderul rădăcină al site-ului serverului.
home_url
=== "www.example.com"
site_url
=== "www.example.com/wordpress"
(Notă: această configurație nu va funcționa "din cutie" doar prin schimbarea valorilor acestor variabile. Este nevoie de modificări suplimentare de configurare pentru a funcționa corect)
Vezi Dându-i WordPress propriul director, secțiunea intitulată Metoda II (Cu schimbare de URL)
pentru cum să faci acest lucru.
În acest caz home_url
și site_url
ar trebui să aibă valori diferite.
În această configurație, doriți ca site-ul să funcționeze exact ca și cum fișierele WordPress ar fi instalate în directorul rădăcină al serverului pentru site-ul dvs...
DAR, din motive organizatorice pe server,
de fapt aveți fișierele WordPress într-un folder numit wordpress
în directorul rădăcină al serverului pentru site.
Deci, utilizatorul va introduce www.example.com
pentru a accesa pagina principală WordPress, în loc de www.example.com/wordpress
funcție wordpress <--> variabilă bază de date <--> Constanță WordPress
Această secțiune presupune configurația din Exemplul 3 de mai sus.
URL în bara de adrese: www.example.com
fișiere WordPress: directorul /wordpress
(Celelalte cazuri sunt banale: Toate variabilele/funcțiile au/returnează aceeași valoare.)
Cum să setați valorile pentru site_url
și home_url
În primul rând, permiteți-mi să menționez că siteurl
și home
stochează valorile returnate de funcțiile de mai sus
- În mod normal, setați aceste valori în panoul de administrare WordPress:
Setări -> General ->
siteurl
Adresa WordPress:https://www.example.com/wordpress
home
Adresa Site-ului:https://www.example.com
(nu includeți slash-uri finale aici - acestea ar fi configurate în altă parte)
Alternativ, puteți seta aceste valori în baza de date WordPress:
tabelulwp_options
->options_name
|options_value
siteurl
|https://www.example.com/wordpress
home
|https://www.example.com
(nu includeți slash-uri finale aici - acestea ar fi configurate în altă parte)
Editați fișierul
wp-config.php
Definiți aceste constante specifice pentru a stoca valorile
Definiți setărileWP_HOME
șiWP_SITEURL
inserând aceste linii în partea superioară a fișieruluiwp-config.php
:define('WP_SITEURL','http://example.com/wordpress'); // fișierele de bază WordPress define('WP_HOME','http://example.com'); // URL în bara de adrese
// ** Setări MySQL - Puteți obține aceste informații de la gazda web ** // ...
(nu includeți slash-uri finale aici - acestea ar fi configurate în altă parte)
Referință: WP_SITEURL și WP_HOME
NOTĂ: Acest lucru este confuz
(Mi-aș dori cu adevărat ca WordPress să fi etichetat Setările similar cu numele lor php,
cum ar fi Adresa Site-ului WordPress
și Adresa Paginii de Start
sau ceva mai explicit precum locația fișierelor de bază ale Site-ului WordPress
și URL pentru accesarea paginii de start WordPress în browser
)
`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Adresa WordPress <--> /wordpress
`WP_HOME` <--> `home_url()` <--> `home` <--> Adresa Site-ului <--> /
Acum, aici devine complicat !
DACĂ ați definit acele constante în fișierul wp-config.php
, nu contează ce valori aveți în baza de date/pagina de setări.
De fapt, nu veți putea modifica această valoare din panoul de administrare (va fi gri). Puteți încă să o modificați editând baza de date, dar făcând acest lucru nu va avea niciun efect asupra site-ului, atâta timp cât constantele există în fișierul wp-config.
Fișierul de configurare nu va schimba valorile din baza de date (și deci nici pagina de setări). În schimb, valorile din baza de date/pagina de setări vor fi ignorate. Valorile din wp-config suprascriu sau au prioritate față de setările din baza de date.
#Deci... pentru a rezuma (TLDR) :
Funcție WP | wp_options. | Constanță WP | ce reprezintă | Etichetă Setări WP | Exemplu
-------------------------------------------------------------------------------------------------------------------------------------
`site_url()` | `siteurl` | `WP_SITEURL` | Locația fișierelor WordPress | Adresa WordPress | https://www.example.com/wordpress
`home_url()` | `home` | `WP_HOME` | bara de adrese din browser | Adresa Site-ului | https://www.example.com
Unde valoarea pentru o constantă WP are prioritate față de o valoare din wp_options/Setări WP.
Valoarea din wp_options și valoarea din Setări WP sunt aceleași.
Editarea uneia, prin definiție, editează și cealaltă.
Este doar două moduri diferite de a accesa aceeași variabilă.
Pe de altă parte, Constantele WordPress sunt unice și independente.
Intern, constantele WordPress (PHP) suprascriu omologii lor din baza de date.
Dacă o constantă este definită în wp-config, aceasta nu schimbă baza de date.
Dar intern WordPress va prefera/folosi întotdeauna valoarea sa în locul celei din baza de date.

Dacă doriți să instalați WordPress într-un director, dar pagina principală a site-ului să fie în rădăcina domeniului, trebuie să mutați fișierul principal index.php în rădăcina domeniului și să editați declarația require pentru a indica către directorul în care se află WordPress.
Acest proces este descris aici: Instalarea WordPress în propriul director.

Întotdeauna folosesc home_url()
deoarece funcționez în modul wp network. Am instalat WordPress într-un director separat doar o dată și nu mi-a plăcut deloc. Totuși, pe unele site-uri folosesc wp_content_dir
.

Nu am experiență cu multisite, așa că nu știu cum funcționează lucrurile în această situație. Prefer să instalez WP într-un director separat pentru a menține lucrurile organizate și a nu încărca directorul root.

Structura mea de fișiere este probabil una dintre cele mai organizate. home/usr/public_html/site1
home/usr/public_html/site2
și așa mai departe, iar wp_content_dir
este de obicei pe un CDN.

dacă ar fi doar o instanță WP ar fi în regulă, dar în majoritatea cazurilor lucrez pe serverele altor oameni cu sute de fișiere și directoare împrăștiate peste tot.

Funcțiile site_url()
și home_url()
sunt similare și pot crea confuzie în modul în care funcționează.
Funcția site_url()
preia valoarea din câmpul siteurl
din tabela wp_options
din baza ta de date.
Acesta este URL-ul către fișierele de bază WordPress.
Dacă fișierele tale de bază se află într-un subdirector /wordpress
pe serverul tău web, valoarea va fi http://example.com/wordpress
.
Funcția home_url()
preia valoarea din câmpul home
din tabela wp_options
din baza ta de date.
Acesta este adresa pe care dorești ca vizitatorii să o folosească pentru a accesa site-ul tău WordPress.
Dacă fișierele tale de bază WordPress se află în /wordpress
, dar dorești ca adresa site-ului tău să fie http://example.com
, valoarea pentru home
ar trebui să fie http://example.com
.

Pentru a răspunde la a doua întrebare:
Î: Dacă asta este corect, atunci pot face WordPress să returneze http://example.com/?
Nu puteți, decât dacă urmați pașii din Oferirea WordPress-ului propriului său director. Folosind această metodă, puneți fișierele de bază ale WordPress în /blog
sau /WordPress
și apoi index.php
în directorul rădăcină.
Dacă decideți să puneți WordPress în propriul său director, atunci veți folosi home_url()
pentru a accesa index.php
și site_url()
pentru a obține fișierele de bază și altele asemenea.
Referințe:
Codex pentru site_url
Codex pentru home_url
Codex pentru Oferirea WordPress-ului Propriului Său Director

Prima ta întrebare a primit răspuns, dar cred că cea mai ușoară modalitate de a obține domeniul tău principal este cu funcția bloginfo('url'); de asemenea, bloginfo() are și alți parametri pe care îi poate returna, verifică documentația.
Există și o funcție get_bloginfo() pe care o poți utiliza dacă dorești să încapsulezi conținutul într-o variabilă.

Deși acest link ar putea răspunde la întrebare, este mai bine să includeți părțile esențiale ale răspunsului aici și să furnizați link-ul ca referință. Răspunsurile care conțin doar link-uri pot deveni invalide dacă pagina la care se face referință se modifică. - Din Recenzie

Cea mai ușoară metodă de a obține URL-ul site-ului fără subdirectoare (http://example.com/ în loc de http://example.com/blog), este să folosești bara oblică /.
De exemplu, dacă scrii:
<a href="/">URL-ul domeniului</a>
Acest cod va crea un link care trimite către domeniul tău.

Mulțumim pentru participare. Din păcate, acest lucru nu răspunde la întrebarea pusă de OP. Există multe motive pentru care o persoană ar avea nevoie să folosească funcțiile WordPress despre care întreabă OP. Este puțin probabil ca OP să dorească pur și simplu să adauge un link către pagina lor principală prin HTML, cum ar fi prin editarea unui articol. Este mai probabil că OP editează un fișier de temă PHP sau un fișier de plugin. În orice caz, lucrează cu PHP, nu cu HTML. În final, deși OP se aștepta la o valoare fără /
pentru acest site, pe un alt site, OP poate să se aștepte ca un subdirector să fie returnat. Depinde de configurația WP pentru fiecare site în parte.
