我的理解是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/
吗?
我的理解是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/
吗?
Answers:
您一次要问两个问题:
home_url()
和之间有什么区别site_url()
?这是答案,我已与WordPress的核心开发人员Andrew Nacin确认,并进行了一些服务器测试以确认Andrew告诉我的内容。
在wp-admin的“常规”>“设置”中,home_url()
引用标有“站点地址(URL)”的字段。令人困惑,是吗?是的,它说的是“站点地址”,所以您可以假设site_url()
,但是您会错的。运行您自己的测试,您会看到。(您可以在主题的functions.php顶部echo H1
使用site_url()
和home_url()
值临时放置一个字段。)
同时,site_url()
在“常规”>“设置”中引用标有“ WordPress地址(URL)”的字段。
因此,如果您想参考物理路径的位置,例如在URL上调用插件的文件夹路径以加载图像,或调用主题的文件夹路径以加载图像,则实际上应该使用其他功能-看看plugins_url()
和get_template_directory_uri()
。
该site_url()
会一直在那里你可以通过套结对到达现场的位置/wp-admin
上结束,而home_url()
不会可靠地这个位置。
该home_url()
会是,你必须通过设置常规>设置“网站地址(URL)”字段设置您的主页。
因此,如果我将博客放在中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;
}
如果要将WP安装在目录中,但将站点安装在域根目录下,则需要将index.php主文件移到域根目录下,并编辑require语句以指向目录。
此处概述了此过程:为WordPress提供自己的目录。
home_url()
因为我处于wp网络模式。我只给过WordPress一个自己的目录,但这并不是我的喜好。但是我确实wp_content_dir
在某些网站上使用了。
home/usr/public_html/site1
home/usr/public_html/site2
等等,然后wp_content_dir
通常是在CDN上
在非标准安装中,您可以将WordPress文件放在网站根目录的子目录中。
...并且仍然允许访问者访问者从您站点的域(根)URL访问WordPress“网站”,而无需附加子目录名称:(
即:www.example.com
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
WP常量的值优先于wp_options / WP设置值。
在最标准的WordPress安装,home_url
并且site_url
将具有相同的价值。
无论如何,它们代表两种不同的事物。
在非标准安装中,它们可能具有不同的值。
注意:为了便于阅读,我在回答中保留了协议。
在这篇文章中,PREPEND每个URL有:https://
,http://
或//
(除非我把它的话)。
(//
是relative
协议,适用于/ http://
或https://
)
home_url
:是您(wordpress)网站的主页,如用户地址栏中所示。
site_url
:是您的wordpress文件所在的目录。
WordPress的5分钟安装会安装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的控制,定义或样式设置。
只是您的博客而已。您博客中的所有网址都将以www.example.com/blog
注意:在文档中,“ Wordpress网站/网站”(而不是简单的“网站/网站”)是指WordPress文件的安装目录。在这种情况下,它是www.example.com/blog
- blog
文件夹中的所有内容。在这种情况下,“ 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
本节假定上面的示例3配置。
地址栏网址: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
table->
`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 ** //
...
(此处不包括斜杠,否则将在其他位置进行配置)
注意:这很令人困惑
(我真的希望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中的值将覆盖或优先于数据库设置。
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设置值相同。
编辑一个,根据定义编辑另一个。
访问同一变量只是两种不同的方式。
另一方面,WordPress常量是唯一且独立的。
在内部,WordPress(PHP)常量将覆盖它们的db对应对象。
如果在wp-config中定义了一个常量,则它不会更改数据库。
但是在内部,WordPress将始终喜欢/使用其值而不是数据库值。
该site_url()
和home_url()
功能是相似的,并可能导致混乱,他们是如何工作的。
该site_url()
功能用于检索值值siteurl
在wp_options
数据库中的表。
这是WordPress核心文件的URL。
如果核心文件存在于/wordpress
Web服务器的子目录中,则值为http://example.com/wordpress
。
该home_url()
功能用于检索值home
的wp_options
数据库中的表。
这是您希望人们访问以查看您的WordPress网站的地址。
如果您的WordPress核心文件存在于其中/wordpress
,但您希望网站URL为http://example.com
home值http://example.com
。
要回答第二个问题:
问:如果正确,那么我可以让wordpress返回http://example.com/吗?
除非您按照给WordPress自己的目录步骤进行操作,否则您不能这样做。使用此方法意味着您将WordPress核心文件放入/blog
或/WordPress
,然后index.php
放入根。
如果你决定把WordPress的自己的目录里,那么你会用home_url()
的去index.php
,并site_url()
为获得核心文件和等。
参考:
Codex for site_url
Codex for home_url
Codex,用于提供Wordpress自己的目录
不带任何子目录(http://example.com/而不是http://example.com/blog)的最简单的获取网站url的方法,只需使用反斜杠/
例如,如果您键入:
<a href="/">domain url</a>
它将创建一个链接到您的域
/
为这个网站,在不同的网站,OP可以预期要返回一个子目录。这取决于每个站点的WP配置。