В чем разница между домашним URL() и URL сайта()


Насколько я понимаю, 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/ ?

Author: butlerblog, 2011-06-17

6 answers

Вы задаете сразу два вопроса:

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

Вот ответы, и я подтвердил это с Эндрю Насином, основным разработчиком WordPress, а также провел несколько серверных тестов, чтобы подтвердить то, что сказал мне Эндрю.

Вопрос № 1

В разделе Общие > Настройки wp-администратора, 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;
}
 59
Author: Volomike, 2012-04-30 01:01:56

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

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

 9
Author: Milo, 2011-06-17 18:12:30

ДВУ:

В нестандартной установке, вы можете разместить ваши файлы WordPress в подкаталог в корне вашего сайта.
...и все-таки позволит вашим посетителям посетителям получить доступ к вашему сайту на WordPress "" от домена вашего сайта (корень) URL-адрес , не добавив имя поддиректории:
(т.е.: www.example.com против 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.

Разные Конфигурации для 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) Обычно вы устанавливаете эти значения на серверной части WordPress/панели мониторинга/панели администратора:
Settings -> General ->
siteurl Адрес WordPress: https://www.example.com/wordpress
home Адрес сайта: 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.

Значение записи wp_options и значение настроек WP одинаковы.
Редактирование одного по определению изменяет другое.
Это всего лишь 2 разных способа доступа к одному и тому же переменная.

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

 9
Author: SherylHohman, 2019-02-02 19:21:50

Функции 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, значение home должно быть http://example.com.

 4
Author: Nanhe Kumar, 2019-09-16 06:06:54

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

Вопрос: Если это правильно, то могу ли я заставить wordpress вернуть http://example.com/ ?

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

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

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

 2
Author: xLRDxREVENGEx, 2020-06-15 08:21:38

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

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

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

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

 -1
Author: jake, 2016-05-05 09:12:41