Care este diferența dintre home_url() și site_url()

17 iun. 2011, 21:07:10
Vizualizări: 161K
Voturi: 93

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

2
Comentarii

Pui două întrebări simultan la o întrebare foarte importantă. Răspunsul la "Care este diferența între home_url() și site_url()?" este diferit de întrebarea "Cum pot obține ca WordPress să returneze rădăcina URL-ului fără subdirectorul în care este instalat?"

Volomike Volomike
30 apr. 2012 02:33:53
Toate răspunsurile la întrebare 7
6
78

Ai pus două întrebări simultan:

  1. Care este diferența dintre home_url() și site_url()?
  2. 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;
}
30 apr. 2012 03:54:56
Comentarii

Ai un link către discuția cu A.Nacin?

kaiser kaiser
30 apr. 2012 04:02:35

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

Volomike Volomike
30 apr. 2012 05:07:21

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.

Jbm Jbm
26 ian. 2014 05:33:53

Răspunsul tău la a doua întrebare este exact ceea ce trebuie!

Devner Devner
19 feb. 2018 10:08:58

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.

Ferris Ferris
26 mai 2023 00:30:49

@Ferris ai dreptate și am editat. Mulțumesc.

Volomike Volomike
30 mai 2023 06:41:55
Arată celelalte 1 comentarii
0
35

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

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

  1. Alternativ, puteți seta aceste valori în baza de date WordPress:
    tabelul wp_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)

  1. Editați fișierul wp-config.php
    Definiți aceste constante specifice pentru a stoca valorile
    Definiți setările WP_HOME și WP_SITEURL inserând aceste linii în partea superioară a fișierului wp-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.

5 ian. 2019 00:44:14
5

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.

17 iun. 2011 21:12:30
Comentarii

Î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.

xLRDxREVENGEx xLRDxREVENGEx
17 iun. 2011 21:29:04

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.

Milo Milo
17 iun. 2011 21:34:07

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.

xLRDxREVENGEx xLRDxREVENGEx
17 iun. 2011 21:39:11

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.

Milo Milo
17 iun. 2011 21:46:01

Este corectă înțelegerea mea că site_url() și home_url() sunt la fel, cu excepția cazului în care configurați directorul de instalare WordPress să fie diferit de root?

Praveen Praveen
20 iun. 2011 22:00:52
0

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.

17 apr. 2013 10:41:34
0

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

17 iun. 2011 21:37:10
1

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ă.

10 oct. 2023 20:46:19
Comentarii

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

cjbj cjbj
14 oct. 2023 12:45:50
1
-1

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.

5 mai 2016 12:12:41
Comentarii

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.

SherylHohman SherylHohman
5 ian. 2019 04:12:55