Jaka jest różnica między home_url () a site_url ()

65

Rozumiem, że site_url()zwraca lokalizację, w której znajdują się podstawowe pliki wordpress.

Tak więc, jeśli mój blog jest hostowany w, http://example.com/blogwtedy site_url()wracahttp://example.com/blog

Ale czym się home_url()różni? Dla mnie home_url()zwraca to samo:http://example.com/blog

Jeśli to prawda, czy mogę poprosić Wordpress o zwrot http://example.com/?

Praveen
źródło
4
Zadajesz jednocześnie dwa pytania dotyczące bardzo ważnego pytania. Odpowiedź na „Jaka jest różnica między home_url () a site_url ()?” różni się od pytania „Jak sprawić, aby WordPress zwrócił katalog główny URL bez podkatalogu, w którym jest zainstalowany?”
Volomike
Przejrzyj te przewodniki kodeksu: codex.wordpress.org/… ; codex.wordpress.org/… ; codex.wordpress.org/…
Tara,

Odpowiedzi:

51

Zadajesz jednocześnie dwa pytania:

  1. Jaka jest różnica między home_url()i site_url()?
  2. Jak zmusić WordPress do zwrócenia katalogu głównego URL bez podkatalogu, w którym jest zainstalowany?

Oto odpowiedzi, które potwierdziłem wraz z Andrew Nacinem, głównym programistą WordPress, a także przeprowadziłem testy serwera, aby potwierdzić to, co powiedział mi Andrew.

Pytanie 1

W Ogólne> Ustawienia wp-admin, home_url()odwołuje się do pola oznaczonego „Adres strony (URL)”. Mylące, co? Tak, jest napisane „Adres strony”, więc możesz założyć site_url(), ale pomylisz się . Uruchom własny test, a zobaczysz. (Możesz tymczasowo upuścić echo H1pole z wartościami site_url()i home_url()na górze funkcji Twojego motywu. Php.)

Tymczasem site_url()odwołuje się do pola oznaczonego „Adres WordPress (URL)” w Ogólne> Ustawienia.

Jeśli więc chcesz wskazać, gdzie może być ścieżka fizyczna, na przykład wywołanie ścieżki folderu wtyczki na adres URL w celu załadowania obrazu lub wywołanie ścieżki folderu motywu w celu załadowania obrazu, w rzeczywistości powinieneś użyć innych funkcji: spójrz na plugins_url()i get_template_directory_uri().

site_url()Zawsze będzie miejsce, w którym można dotrzeć do witryny, na sklejaniu /wp-adminna końcu, a home_url()nie być wiarygodny tej lokalizacji.

home_url()Byłoby gdzie ustawiłeś swoją stronę poprzez ustawienie Ogólne> Ustawienia „Adres strony (URL)” pole.

Pytanie 2

Tak więc, jeśli umieściłem mojego bloga http://example.com/blogi example.comjest to tylko statyczna strona, na której lubię motyw portfolio, byłby to scenariusz, który zgadza się z twoim pytaniem. W takim przypadku użyłbym tego fragmentu kodu:

<?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;
}
Volomike
źródło
Czy masz link do dyskusji z A.Nacinem?
kaiser
1
To było przez e-mail. Przepraszam. Aha, i dziękuję za edycję - zapamiętam tę zmianę składni następnym razem.
Volomike,
8
Zajęło mi bardzo dużo czasu i dużo bólu, aby zrozumieć, że „Adres strony (URL)” = „dom” i „Adres WordPress (URL)” = „siteurl”. Powinny zdecydowanie zmienić te etykiety.
Jbm
Twoja odpowiedź na drugie pytanie trafia w dziesiątkę!
Devner
7

Jeśli chcesz, aby WP zainstalowano w katalogu, ale w katalogu głównym witryny w katalogu głównym domeny, musisz przenieść główny plik index.php do katalogu głównego domeny i edytować instrukcję wymaganą, aby wskazywała w katalogu.

Proces ten jest opisany tutaj: Nadawanie WordPressowi własnego katalogu .

Milo
źródło
Zawsze używam, home_url()ponieważ jestem w trybie sieci wp. Dałem WordPressowi tylko jeden katalog i to po prostu mi się nie podobało. Ale jednak korzystam z wp_content_dirniektórych stron.
xLRDxREVENGEx
Nie mam doświadczenia z wieloma witrynami, więc nie wiem, jak to działa w tej sytuacji. Wolę instalować WP w katalogu, aby utrzymać porządek i nie zaśmiecać katalogu głównego.
Milo
moja struktura plików jest prawdopodobnie jedną z najładniejszych w okolicy. home/usr/public_html/site1 home/usr/public_html/site2i tak dalej, a następnie wp_content_dirzwykle jest na cdn
xLRDxREVENGEx
gdyby instalacja WP była jedyną rzeczą, byłoby dobrze, ale pracuję głównie na serwerach innych ludzi z setkami plików i katalogów.
Milo
Czy dobrze rozumiem, że site_url () i home_url () są takie same, chyba że ktoś skonfiguruje swój katalog instalacyjny wordpress na inny niż root?
Praveen,
3

TLDR:

W niestandardowej instalacji możesz umieścić pliki WordPress w podkatalogu katalogu głównego witryny.
... i nadal pozwalaj odwiedzającym odwiedzającym na dostęp do twojej „witryny” WordPress z adresu URL domeny (katalogu głównego) witryny, bez dołączania nazwy podkatalogu:
(tj: www.example.comvs vs 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 

Gdzie wartość stałej WP ma pierwszeństwo przed wartością wp_options / WP Settings.

Różne konfiguracje dla WordPress

W najbardziej standardowych instalacjach WordPress home_urli site_urlbędzie miał tę samą wartość.
Niezależnie od tego reprezentują dwie różne rzeczy.

W niestandardowej instalacji mogą mieć różne wartości.

UWAGA: W swojej odpowiedzi pomijam protokół, aby ułatwić czytanie.
W tym poście, poprzedź Każdy URL z: https://, http://LUB //
(chyba że go już włączone).

( //jest relativeprotokołem i będzie działał dla jednego / obu http://lub https://)

Standardowe instalacje (w tym instalacje „jednym kliknięciem”)

home_url: to strona główna Twojej witryny (wordpress), jak wskazano w pasku adresu użytkownika.
site_url: to katalog, w którym znajdują się twoje pliki WordPress.

5-minutowa instalacja WordPress instaluje pliki wordpress. Te dwie wartości będą takie same - pliki wordpress zostaną zainstalowane w tym samym folderze, którego chcesz, aby użytkownicy korzystali z adresu Twojej witryny lub w części wordpress (blog) witryny serwera.

Przykład 1:
użytkownik uzyskuje dostęp do swojego bloga na: www.example.com,
wordpress plików zainstalowanych na: www.example.comlub folderu głównego stronie serwera.

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

Przykład 2:
użytkownik uzyskuje dostęp do swojego bloga na: www.example.com/blog,
pliki wordpress zainstalowany pod adresem: www.example.com/bloglub w blogfolderze wewnątrz katalogu głównego witryny.

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

W tym przypadku www.example.comjest to główna strona internetowa i www.example.com/blogjest ona katalogiem głównym Twojego bloga.
Tutaj Twój blog jest oddzielony i działa jako podzbiór Twojej głównej witryny.
W takim przypadku Twoja główna strona internetowa nie jest kontrolowana, definiowana ani stylizowana przez WordPress.
Tylko twój blog jest. Wszystkie adresy URL na Twoim blogu będą kontynuowane przezwww.example.com/blog

Uwaga: W dokumentacji „strona / witryna Wordpress” (w przeciwieństwie do po prostu „strona / strona internetowa”) odnosi się do katalogu, w którym zainstalowane są pliki WordPress. W tym przypadku jest www.example.com/blog- wszystko w blogfolderze. „Witryna WordPress” w tym scenariuszu nie jest taka sama jak domena, katalog główny lub główna witryna. Jest to podzbiór całej witryny. Coś jak strona internetowa w witrynie. Wspominam o tym, ponieważ terminologia może wydawać się niejasna lub myląca, biorąc pod uwagę tę szczególną konfigurację.

Alternatywna konfiguracja instalacji WordPress

Nadawanie WordPressowi własnego katalogu , sekcja Method II (With URL change).

Na przykład wiele osób nie chce zapychać folderu głównego swojej witryny wszystkimi plikami Wordpress.
Chcą zainstalować wordpress w podkatalogu *, ale mają dostęp do „bloga” lub „strony WordPress” tak, jakby pliki zostały zainstalowane w katalogu głównym serwera na stronie.

Jest to szczególnie ważne, gdy WordPress jest używany do budowy i prowadzenia całej strony internetowej, która nawet nie ma „bloga”.

Przykład 3:
użytkownik uzyskuje dostęp do „blog” pod adresem: www.example.com,
wordpress plików zainstalowanych na: www.example.com/wordpresslub folderu głównego stronie serwera.

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

(Uwaga: ta konfiguracja nie będzie działać „od razu po wyjęciu z pudełka” po prostu poprzez zmianę wartości tych zmiennych. Wymaga to dodatkowych zmian konfiguracji, aby działała poprawnie)
Zobacz Jak nadać WordPress własnemu katalogowi , rozdział zatytułowany Method II (With URL change)jak to zrobić.

W tym przypadku home_urli site_urlpowinny posiadać różne wartości.

W tej konfiguracji, chcesz swoją stronę, aby działać dokładnie tak, jakby pliki WordPress zostały zainstalowane w katalogu głównym serwera na swojej stronie ...
ale dla celów organizacyjnych na serwerze,
ty rzeczywiście masz pliki WordPress w folderze o nazwie wordpressw serwującego katalog główny swojej witryny.

Dlatego użytkownik wpisze, www.example.comaby uzyskać stronę główną WordPress, zamiastwww.example.com/wordpress

funkcja wordpress <--> zmienna bazy danych <--> Wordpress Constant

W tej sekcji przyjęto powyższą konfigurację z przykładu 3.
adres paska adresu: www.example.com
pliki wordpress: / katalog wordpress

(Pozostałe przypadki są trywialne: wszystkie zmienne / funkcje zachowują / zwracają tę samą wartość.)

Jak ustawić wartości dla site_urlihome_url

Po pierwsze, proszę zauważyć, że siteurli homeprzechowują wartości zwrócone przez powyższe funkcje

1) Zwykle ustawiasz te wartości w panelu zaplecza / panelu kontrolnym / panelu administracyjnym
Settings -> General ->
siteurl WordPress: Adres WordPress: https://www.example.com/wordpress
home Adres strony: https://www.example.com

(nie dołączaj tutaj ukośników końcowych - które zostałyby skonfigurowane gdzie indziej)

2) Alternatywnie możesz ustawić te wartości w bazie danych WordPress:
wp_optionstabela ->

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

(nie dołączaj tutaj ukośników końcowych - które zostałyby skonfigurowane gdzie indziej)

3) Edytuj swoją wp-config.php
Zdefiniuj te określone stałe, aby zachować wartości
Zdefiniuj WP_HOMEi WP_SITEURLustawienia, wstawiając te linie w górę wp-config.phppliku:

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

(nie dołączaj tutaj ukośników końcowych - które zostałyby skonfigurowane gdzie indziej)

Odniesienie: WP_SITEURL i WP_HOME

UWAGA: Jest to mylące
(naprawdę chciałbym, aby WordPress nazwał Ustawienia podobnymi do ich nazw php,
takich jak Wordpress Site Addressi Home Page Addresslub coś bardziej wyraźnego, takiego jak location of WordPress Site core filesi browser url to access WordPress home page)

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

Teraz tutaj jest trudne!

JEŚLI zdefiniowałeś te stałe w swoimwp-config.phppliku, nie ma znaczenia, jakie wartości masz na stronie bazy danych / ustawień.
W rzeczywistości nie będzie można zmodyfikować tej wartości za pośrednictwem zaplecza (zostanie wyszarzona). Nadal możesz modyfikować, edytując bazę danych, ale nie będzie to miało wpływu na twoją stronę, podczas gdy stałe istnieją w pliku wp-config.

Twój plik konfiguracyjny nie zmieni wartości w twojej bazie danych (lub stąd stronie ustawień). Zamiast tego wartości strony bazy danych / ustawień zostaną zignorowane . Wartości w wp-config zastępują ustawienia bazy danych lub są nadrzędne.

Więc ... aby zakończyć (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 

Gdzie wartość stałej WP ma pierwszeństwo przed wartością wp_options / WP Settings.

Wartość rekordu wp_options i wartość ustawień WP są takie same.
Edycja jednego z definicji powoduje edycję drugiego.
To tylko 2 różne sposoby dostępu do tej samej zmiennej.

Z drugiej strony Stałe WordPress są wyjątkowe i niezależne.
Wewnętrznie stałe WordPress (PHP) zastępują ich odpowiedniki db.
Jeśli stała jest zdefiniowana w wp-config, nie zmienia bazy danych.
Ale wewnętrznie WordPress zawsze będzie preferował / używał swojej wartości zamiast db db.

SherylHohman
źródło
3

Funkcje site_url()i home_url()są podobne i mogą prowadzić do nieporozumień w ich działaniu.

Ta site_url()funkcja pobiera wartość siteurlz wp_optionstabeli w bazie danych.

To jest adres URL do podstawowych plików WordPress.
Jeśli twoje podstawowe pliki istnieją w podkatalogu /wordpressna twoim serwerze internetowym, wartością będzie http://example.com/wordpress.

home_url()Funkcja pobiera wartość homew wp_optionstabeli w bazie danych.

To jest adres, który chcesz odwiedzić, aby zobaczyć Twoją stronę internetową WordPress.

Jeśli twoje podstawowe pliki WordPress istnieją /wordpress, ale chcesz, aby URL twojej witryny był http://example.comwartością domową, powinien być http://example.com.

Nanhe Kumar
źródło
2

Aby odpowiedzieć na drugie pytanie:

P: Jeśli to prawda, to czy mogę uzyskać wordpress, aby zwrócił http://example.com/ ?

Nie możesz, chyba że weźmiesz Dawanie WordPressowi własnych kroków katalogu . Korzystanie z tego oznacza, że ​​umieścisz podstawowe pliki WordPress w /bloglub, /WordPressa następnie index.phpw katalogu głównym.

Jeśli zdecydujesz się umieścić WordPress we własnym katalogu, skorzystasz z niego, home_url()aby przejść do index.phpi site_url()uzyskać podstawowe pliki i tym podobne.

Refrences:
Codex for site_url
Codex for home_url
Codex for Giving Wordpress Own Directory

xLRDxREVENGEx
źródło
-1

Najprostszym sposobem na uzyskanie adresu URL strony bez podkatalogów ( http://example.com/ zamiast http://example.com/blog ), wystarczy użyć ukośnika odwrotnego /

Na przykład, jeśli wpiszesz:

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

Stworzy link do Twojej domeny

jake
źródło
Dziękujemy za udział. Niestety nie odpowiada to na pytanie postawione przez PO. Istnieje wiele powodów, dla których osoba musi korzystać z funkcji wordpress, o które prosi OP. Jest mało prawdopodobne, że OP po prostu chce dodać link do swojej strony głównej za pomocą html, na przykład edytując post. Bardziej prawdopodobne jest, że OP edytuje plik motywu php lub plik wtyczki. W każdym razie pracują z php, a nie HTML. Wreszcie, podczas gdy PO oczekuje wartość bez /na tym miejscu, na innym miejscu, OP może oczekiwać podkatalogu zostać zwrócone. To zależy od konfiguracji WP dla każdej witryny.
SherylHohman