В чем разница между 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/?

Praveen
источник
4
Вы задаете два вопроса одновременно по очень важному вопросу. Ответ на вопрос "В чем разница между home_url () и site_url ()?" отличается от вопроса "Как заставить WordPress вернуть корень URL без подкаталога, в котором он установлен?"
Volomike
Просмотрите эти руководства по Codex: 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()значениями в верхней части functions.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;
}
Volomike
источник
Есть ли у вас ссылка на дискуссию с А.Нациным?
Кайзер
1
Это было по электронной почте. Сожалею. О, и спасибо за редактирование - я запомню этот синтаксис в следующий раз.
Volomike
8
Мне потребовалось очень много времени и много боли, чтобы понять, что «Адрес сайта (URL)» = «дом» и «Адрес WordPress (URL)» = «siteurl». Они должны обязательно поменять эти ярлыки.
Jbm
Ваш ответ на второй вопрос попадает в джекпот!
Девнер
7

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

Этот процесс описан здесь: Предоставление WordPress собственного каталога .

Milo
источник
Я всегда просто использую, 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, отличный от корневого?
Правин
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» в этом сценарии не совпадает с вашим доменом, вашим корнем или вашим основным веб-сайтом. Это подмножество вашего общего сайта. Вроде как сайт внутри сайта. Я упоминаю об этом, поскольку терминология может показаться неясной или запутанной, учитывая данную конкретную настройку.

Конфигурация альтернативной установки 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

Этот раздел предполагает конфигурацию примера 3 выше.
URL адресной строки: www.example.com
WordPress файлы: / WordPress каталог

(Другие случаи тривиальны: все переменные / функции удерживают / возвращают одно и то же значение.)

Как установить значения для site_urlиhome_url

Во-первых, позвольте мне заметить, что siteurlи homeхранить значения, возвращенные функциями выше

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

(не включайте косые черты здесь - это будет настроено в другом месте)

2) В качестве альтернативы, вы устанавливаете эти значения в вашей базе данных WordPress:
wp_optionsтаблица ->

`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 совпадают.
Редактирование одного, по определению редактирование другого.
Это просто 2 разных способа доступа к одной и той же переменной.

С другой стороны, константы WordPress уникальны и независимы.
Внутренне константы WordPress (PHP) переопределяют свои аналоги в БД.
Если константа определена в wp-config, она не изменит базу данных.
Но внутренне WordPress всегда предпочитает / использует его значение вместо db.

SherylHohman
источник
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

Чтобы ответить на ваш второй вопрос:

Q: Если это правильно, могу ли я получить WordPress для возврата http://example.com/ ?

Вы не можете, если вы не предпримите Giving WordPress свои собственные шаги каталога . Использование этого означает, что вы помещаете файлы ядра WordPress в /blogили, /WordPressа затем index.phpв ваш корень.

Если вы решите поместить WordPress в свой собственный каталог, вы будете использовать home_url()его для получения index.phpи site_url()получения основных файлов и тому подобного.

Ссылки:
Кодекс для site_url
Кодекса для home_url
Кодекса для предоставления Wordpress собственного каталога

xLRDxREVENGEx
источник
-1

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

Например, если вы введете:

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

Это создаст ссылку, которая идет на ваш домен

Джейк
источник
Спасибо за участие. К сожалению, это не отвечает на вопрос, поставленный ФП. Есть много причин, по которым человеку нужно использовать функции wordpress, о которых спрашивает OP. Маловероятно, что OP просто хочет добавить ссылку на свою домашнюю страницу через HTML, например, редактируя сообщение. Скорее всего, OP редактирует файл темы php или файл плагина. В любом случае они работают с php, а не с html. И, наконец, в то время как OP ожидается значение без /для этого сайта, на другом сайте, OP может ожидать подкаталог быть возвращены. Это зависит от конфигурации WP для каждого сайта.
Шерил Хохман