Яка різниця між home_url () та site_url ()


65

Я розумію, що site_url()повертає місце, де є основні файли WordPress.

Отже, якщо мій щоденник розміщений, http://example.com/blogто site_url()повертаєтьсяhttp://example.com/blog

Але як тоді home_url()відрізняються? Для мене home_url()повертає те саме:http://example.com/blog

Якщо це правильно, то чи можу я повернути wordpress http://example.com/?


4
Ви ставите відразу два запитання щодо дуже важливого питання. Відповідь на "Яка різниця між home_url () та site_url ()?" відрізняється від питання "Як змусити WordPress повернути корінь URL-адреси без підкаталогу, де він встановлений?"
Воломійк

Перегляньте ці посібники з кодексу: codex.wordpress.org/… ; codex.wordpress.org/… ; codex.wordpress.org/…
Тара

Відповіді:


51

Ви ставите відразу два питання:

  1. Яка різниця між home_url()і site_url()?
  2. Як змусити WordPress повернути корінь URL-адреси без підкаталогу, де він встановлений?

Ось відповіді, і я підтвердив, що Андрій Начін, основний розробник WordPress, а також провів кілька тестів на сервері, щоб підтвердити те, що сказав мені Ендрю.

Питання 1

Загалом> Налаштування wp-admin, home_url()посилається на поле з написом "Адреса сайту (URL)". Заплутано, так? Так, там написано "Адреса сайту", тому ви можете припустити site_url(), але ви помиляєтесь . Запустіть власний тест і побачите. (Ви можете тимчасово скинути echo H1поле з site_url()та home_url()значення у верхній частині функції вашої теми.php.)

Тим часом site_url()посилання на поле, позначене "Адреса WordPress (URL)", в загальних пунктах> Налаштування.

Отже, якщо ви хочете вказати, де може бути фізичний шлях, наприклад, виклик шляху до папки плагіна за URL-адресою для завантаження зображення або виклик шляху папки теми для завантаження зображення, ви фактично повинні використовувати інші функції для них - дивитись на plugins_url()і get_template_directory_uri().

site_url()Завжди буде місцем , де ви можете дістатися до місця по лавіруючи на /wp-adminврешті-решт, в той час як home_url()НЕ буде надійно бути цим місцем.

home_url()Б там , де ви встановили домашню установку Загальних> Налаштування «Адреса сайту (URL)» поле.

Питання №2

Отже, якщо я розмістив свій блог http://example.com/blog, і example.comце просто якийсь статичний сайт, де мені подобається тема портфоліо, то це був би сценарій, який відповідає вашому питанню. У такому випадку я б використав цей фрагмент коду:

<?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;
}

Чи є у вас посилання на дискусію з А.Нацином?
кайзер

1
Це було по електронній пошті. Вибачте. О, і дякую за редагування - я згадаю, що змінити синтаксис наступного разу.
Volomike

8
Мені знадобилося дуже багато часу та багато болю, щоб зрозуміти, що 'Address Site (URL)' = 'home' та 'WordPress Address (URL)' = 'siteurl'. Вони обов'язково повинні змінити ці ярлики.
Jbm

Ваша відповідь на друге запитання вражає джекпот!
Девнер

7

Якщо ви хочете, щоб WP був встановлений у каталозі, але на домашньому сайті на вашому корені домену, вам потрібно перемістити основний файл index.php до кореня вашого домену та відредагувати заяву про вимогу, щоб вказати у вашому каталозі.

Цей процес описаний тут: Надання WordPress власного каталогу .


Я завжди просто користуюся, home_url()оскільки перебуваю в режимі WP мережі. Я лише один раз дав WordPress свою власну директорію, і це мені просто не сподобалось. Але я все ж використовую wp_content_dirна деяких сайтах.
xLRDxREVENGEx

Я не маю досвіду роботи з багатостороннім сайтом, тому мені невідомо, як працює цей матеріал у цій ситуації. Я вважаю за краще встановлювати WP в каталог лише для того, щоб все було в чистоті і не захаращувалося корінь.
Міло

моя структура файлів, мабуть, одна з найновіших. home/usr/public_html/site1 home/usr/public_html/site2і так далі, і тоді, wp_content_dirяк правило, на cdn
xLRDxREVENGEx

якби встановлення WP було єдиним, там було б добре, але я здебільшого працюю на серверах інших народів із сотнями файлів і каталогів, залитих про них.
Міло

Чи правильно я розумію, що site_url () та home_url () є однаковими, якщо тільки один не встановить каталог для встановлення Wordpress, який відрізняється від кореня?
Praveen

3

TLDR:

У нестандартній установці ви можете розмістити свої файли WordPress у підкаталозі кореня веб-сайту.
... і надалі дозволяти відвідувачам відвідувачам отримувати доступ до вашого веб-сайту WordPress з доменної (кореневої) URL-адреси вашого сайту, не додаючи ім'я підкаталогу:
(тобто: www.example.comvs 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 

Якщо значення константи WP має перевагу над значенням wp_options / WP Settings.

Різні конфігурації для WordPress

У найбільш стандартних установках WordPress home_urlі site_urlбуде мати однакове значення.
Незалежно вони представляють дві різні речі.

У нестандартній установці вони можуть мати різні значення.

ПРИМІТКА: Я залишаю протокол у своїй відповіді для легшої читабельності.
У цьому пості, забезпечите КОЖНОГО URL з: https://, http://або //
(якщо я не включив його вже).

( //є relativeпротокол і буде працювати для або / http://або або https://)

Стандартні установки (включаючи встановлення "одним клацанням")

home_url: - це домашня сторінка вашого веб-сайту (wordpress), зазначена в адресному рядку користувача.
site_url: - це каталог, де розміщені ваші файли wordpress.

5-хвилинна установка WordPress встановлює файли Wordpress, ці два значення будуть однаковими - файли WordPress будуть встановлені в тій самій папці, яку ви хочете, щоб користувачі зверталися до вашого веб-сайту, або в частині WordPress (блогу) веб-сайту вашого сервера.

Приклад 1:
користувач отримує доступ до блог по адресою: www.example.com,
WordPress файлів , встановлених по адресою: www.example.comабо в кореневій папці веб - сайті сервера.

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

Приклад 2:
користувач отримує доступ до блог по адресою: www.example.com/blog,
WordPress файлів , встановлені по адресою: www.example.com/blogабо в blogпапці всередині кореневого каталогу вашого сайту.

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

У цьому випадку www.example.comце основний веб-сайт і www.example.com/blogє коренем вашого блогу.
Тут ваш блог відокремлений від основного веб-сайту та працює як підмножина.
У цьому випадку ваш головний веб-сайт не контролюється, не визначається або стилюється WordPress.
Просто ваш блог є. Усі URL у вашому блозі будуть виконуватисьwww.example.com/blog

Примітка. У документації "Сайт / веб-сайт Wordpress" (на відміну від просто "сайт / веб-сайт") посилається на каталог, де встановлені ваші файли WordPress. У цьому випадку це www.example.com/blog- все , що знаходиться всередині blogпапки. "Веб-сайт WordPress" у цьому сценарії не такий, як ваш домен, ваш root або ваш головний веб-сайт. Це підмножина вашого загального веб-сайту. На зразок веб-сайту всередині веб-сайту. Я згадую про це, оскільки термінологія може здаватися незрозумілою або заплутаною, враховуючи цю особливість.

Чергова конфігурація установки WordPress

Даючи WordPress власний довідник , розділ Method II (With URL change).

Наприклад, багато людей не хочуть засмічувати кореневу папку свого веб-сайту усіма файлами wordpress.
Вони хочуть встановити wordpress у підкаталозі, * але мають доступ до "блогу" або "веб-сайту WordPress" так, як ніби файли були встановлені в корені кореня сервера для веб-сайту.

Особливо це стосується того, коли WordPress використовується для створення та запуску цілого веб-сайту, який навіть не має "блогу".

Приклад 3:
користувач отримує доступ до вашого «блог» по адресою: www.example.com,
WordPress файлів , встановлених по адресою: www.example.com/wordpressабо в кореневій папці веб - сайті сервера.

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

(Примітка: ця конфігурація не працюватиме "поза коробкою", лише змінивши значення цих змінних. Для коректної роботи потрібні додаткові зміни конфігурації.
Див. Розділ " Надання WordPress власного каталогу" , розділ Method II (With URL change)про те, як це зробити.

У цьому випадку home_urlі site_urlповинні бути різні значення.

У цьому налаштуванні ви хочете, щоб ваш веб-сайт функціонував так, як якщо б файли WordPress були встановлені в кореневому каталозі сервера для вашого веб-сайту ...
АЛЕ для організаційних цілей на сервері
ви фактично маєте свої файли WordPress у папці, що називається wordpressна сервері кореневий каталог вашого веб-сайту.

Таким чином, користувач буде вводити, www.example.comщоб отримати вашу домашню сторінку WordPress замістьwww.example.com/wordpress

функція wordpress <--> змінна база даних <--> Wordpress Constant

Цей розділ передбачає приклад 3 конфігурації вище.
URL адресного рядка: www.example.com
файли wordpress: / wordpress

(Інші випадки тривіальні: всі змінні / функції утримують / повертають однакове значення.)

Як встановити значення для site_urlіhome_url

По-перше, дозвольте мені зазначити, що siteurlі homeзберігайте значення, повернені функціями вище

1) Зазвичай ви встановлюєте ці значення на бекенді / панелі керування / адміністратора
Settings -> General ->
siteurl WordPress: Адреса WordPress: https://www.example.com/wordpress
home Адреса сайту: https://www.example.com

(не включайте сюди косої риски - це було б налаштовано в іншому місці)

2) Або ви встановлюєте ці значення у своїй базі даних WordPress:
wp_optionstable ->

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

(не включайте сюди косої риски - це було б налаштовано в іншому місці)

3) Редагуйте wp-config.php
Визначте ці конкретні константи, щоб утримувати ваші значення.
Визначити WP_HOMEта WP_SITEURLналаштування, вставивши ці рядки у верхню частину wp-config.phpфайлу:

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

(не включайте сюди косої риски - це було б налаштовано в іншому місці)

Довідка: WP_SITEURL та WP_HOME

ПРИМІТКА: Це заплутано
(я дуже хотів би, щоб WordPress позначив Налаштування, подібні до їхніх імен PHP,
таких як Wordpress Site Addressта Home Page Addressабо щось більш явне, як location of WordPress Site core filesі browser url to access WordPress home page)

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

Тепер ось, де стає хитро!

ЯКЩО ви визначили ці константи у вашомуwp-config.phpфайлі, це не має значення, які значення у вас є на базі даних / сторінці налаштувань.
Насправді ви не зможете змінити це значення за допомогою зворотного кінця (воно буде сірим). Ви все ще можете змінити, відредагувавши свою базу даних, але це не вплине на ваш сайт, тоді як константи існують у вашому файлі wp-config.

Ви конфігураційний файл не змінить значення у вашій базі даних (або, отже, на сторінці налаштувань). Натомість значення вашої бази даних / налаштувань будуть ігноровані . Значення wp-config переосмислюють або мають перевагу над налаштуваннями вашої бази даних.

Отже ... завершити (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 

Якщо значення константи WP має перевагу над значенням wp_options / WP Settings.

Значення запису wp_options та значення WP Settings однакові.
Редагування одного за визначенням редагує інше.
Це лише два різні способи доступу до однієї змінної.

З іншого боку, константи WordPress унікальні та незалежні.
Внутрішньо константи WordPress (PHP) переважають свої аналоги db.
Якщо константа визначена в wp-config, вона не змінює базу даних.
Але внутрішньо WordPress завжди буде віддавати перевагу / використовувати його значення замість db.


3

Функції site_url()та home_url()функції схожі і можуть призвести до плутанини в тому, як вони працюють.

site_url()Функція повертає значення значення для siteurlв wp_optionsтаблиці в базі даних.

Це URL-адреса до основних файлів WordPress.
Якщо ваші основні файли існують у підкаталозі /wordpressвашого веб-сервера, значення буде http://example.com/wordpress.

home_url()Функція повертає значення homeв wp_optionsтаблиці в базі даних.

Це адреса, яку ви хочете, щоб люди відвідували ваш веб-сайт WordPress.

Якщо ваші основні файли WordPress існують у /wordpress, але ви хочете, щоб URL-адреса вашого веб-сайту була http://example.comдомашньою http://example.com.


2

Щоб відповісти на ваше друге запитання:

З: Якщо це правильно, то чи можу я отримати wordpress для повернення http://example.com/ ?

Ви не можете, якщо не вчинити, щоб надавати WordPress свої власні каталоги . Використовуючи це означає, що ви вводите основні файли WordPress у /blogабо, /WordPressа потім index.phpу свій корінь.

Якщо ви вирішили поставити WordPress всередині своєї власної каталогів, тоді ви використовуєте home_url()для переходу до index.phpта site_url()отримання основних файлів тощо.

Відгуки:
Codex для site_url
Codex для home_url
Codex для надання власного каталогу Wordpress


-1

Найпростіший спосіб отримати URL-адресу сайту без будь-яких підкаталогів ( http://example.com/ замість http://example.com/blog ), просто скористайтесь зворотною косою рисою /

Наприклад, якщо ви введете:

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

Це створить посилання, яке переходить до вашого домену


Дякуємо за участь На жаль, це не відповідає на питання, поставлене ОП. Існує багато причин, чому людині потрібно користуватися функціями Wordpress, про яку питає. Навряд чи OP просто хоче додати посилання на свою домашню сторінку через html, наприклад, редагуючи публікацію. Ймовірніше, що ОП редагує файл теми PHP або файл плагінів. У будь-якому випадку вони працюють з php, а не html. І, нарешті, в той час як OP очікується значення без /для цього сайту, на іншому сайті, OP може очікувати підкаталог бути повернуті. Це залежить від конфігурації WP для кожного сайту.
SherylHohman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.