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/
吗?#1 楼
您一次要问两个问题:home_url()
和site_url()
有什么区别?如何让WordPress返回没有安装子目录的URL根目录?
这是答案,我向WordPress的核心开发者Andrew Nacin确认,并进行了一些服务器测试以确认Andrew告诉我的内容。
问题#1
在通用> wp-admin的设置中,
home_url()
引用标有“站点地址(URL)”的字段。令人困惑,是吗?是的,它说“ Site Address”,所以您可以假设site_url()
,但是您会错。运行您自己的测试,您会看到。 (您可以在主题函数的顶部将echo H1
和site_url()
值临时放置在home_url()
字段中。)设置。因此,如果您想引用物理路径的位置,例如在URL上调用插件的文件夹路径以加载图像,或调用主题的文件夹路径以加载图像。 ,您实际上应该使用其他功能-请查看
site_url()
和plugins_url()
。 get_template_directory_uri()
就是您通过设置常规>设置“站点地址(URL)”字段来设置主页的位置。问题#2
因此,如果我将博客放在
site_url()
中,而/wp-admin
只是我喜欢投资组合主题的静态站点,则t他的情况会符合您的问题。在这种情况下,我将使用以下代码段:<?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;
}
评论
您是否有与A.Nacin进行讨论的链接?
– kaiser
2012年4月30日的1:02
是通过电子邮件。抱歉。哦,感谢您的修改-我会记住下一次语法更改。
– Volomike
2012年4月30日在2:07
我花了很长时间并且很痛苦地意识到'Site Address(URL)'='home'和'WordPress Address(URL)'='siteurl'。他们绝对应该更改这些标签。
– Jbm
2014年1月26日下午3:33
您对第二个问题的回答中奖了!
–德夫纳
18年2月19日在8:08
#2 楼
如果要将WP安装在目录中,但将站点安装在域根目录下,则需要将主index.php文件移至域根目录,然后编辑require语句以指向目录。此处概述了此过程:为WordPress提供自己的目录。
评论
由于我处于wp网络模式,因此我始终只使用home_url()。我只给过WordPress一个自己的目录,但这并不是我的喜好。但是我确实在某些站点上使用wp_content_dir。
–xLRDxREVENGEx
2011年6月17日18:29
我没有使用多站点的经验,所以我不熟悉这种情况下的工作原理。我更喜欢将WP安装在目录中,只是为了保持环境整洁而不使根混乱。
–米洛
2011年6月17日18:34
我的文件结构可能是最整洁的文件结构之一。 home / usr / public_html / site1 home / usr / public_html / site2依此类推,然后wp_content_dir通常位于CDN上
–xLRDxREVENGEx
2011年6月17日18:39
如果仅安装WP会很好,但是我主要是在其他人的服务器上工作,其中有成百上千个文件和目录。
–米洛
2011年6月17日18:46
我的理解正确吗,除非site_url()和home_url()相同,除非将其wordpress安装目录设置为与根目录不同?
–普拉文
2011年6月20日19:00
#3 楼
TLDR:在非标准安装中,您可以将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文件所在的目录。 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的控制,定义或样式设置。
您的博客就是。注意:在文档中,“ Wordpress网站/网站”(而不是“网站/网站”)是指您的WordPress文件的安装目录。 。在这种情况下,它是
www.example.com/blog
-www.example.com/blog
文件夹中的所有内容。在这种情况下,“ WordPress网站”与您的域,您的根目录或主网站不同。它是您整体网站的子集。有点像网站内部的网站。我提到这一点是因为考虑到这种特殊设置,术语似乎不清楚或令人困惑。备用WordPress安装配置
为WordPress提供其自己的目录,第
blog
部分。 例如,许多人不想用所有wordpress文件堵塞网站的根文件夹。
他们想将wordpress安装在子目录中,但*带有“博客”或“ WordPress网站”,就好像文件已安装在网站服务器根目录中一样。
当使用WordPress构建和运行甚至没有“博客”的整个网站时,尤其如此。
示例3:
用户在以下位置访问您的“博客”:
Method II (With URL change)
,wordpress文件安装在
www.example.com
或服务器网站的根文件夹中。 www.example.com/wordpress
=== home_url
"www.example.com"
=== site_url
(注意:仅通过更改这些变量的值,此配置将无法“开箱即用”。它需要进行其他配置更改才能正常工作)。
有关如何将其自己的目录命名为
"www.example.com/wordpress"
,请参阅做这个。 在这种情况下,
Method II (With URL change)
和home_url
应该具有不同的值。在此设置中,您希望您的网站完全像在服务器的根目录中安装WordPress文件那样运行。您的网站...
,但出于服务器上的组织目的,
您实际上将WordPress文件放在网站的服务器根目录中名为
site_url
的文件夹中。因此,用户将键入
wordpress
来获取WordPress主页,而不是www.example.com
wordpress函数<->数据库变量<-> Wordpress常量
本节假设上面的示例3配置。
地址栏网址:www.example.com
wordpress文件:/ wordpress目录
(其他情况很简单) :所有变量/函数都保持/返回相同的值。)
如何设置
www.example.com/wordpress
和site_url
的值首先,让我注意
home_url
和siteurl
存储值returne d通过上述功能1)通常,您可以在WordPress后端/仪表板/管理面板上设置以下值:
home
Settings -> General ->
WordPress地址:siteurl
https://www.example.com/wordpress
网站地址:home
(不要在此处包含斜杠-可以在其他位置配置斜杠)
2)或者,您可以在WordPress数据库中设置以下值:
https://www.example.com
table-> `options_name` | `options_value`
----------------------------------------------------
`siteurl` | `https://www.example.com/wordpress`
`home` | `https://www.example.com`
(此处不包含斜线-否则将在其他位置配置)
wp_options
定义这些特定常数以保存您的值
通过将以下行插入
wp-config.php
文件的顶部来定义WP_HOME
和WP_SITEURL
设置: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名称类似的设置标记为标签,
,例如
wp-config.php
和Wordpress Site Address
或类似的名称更显式,例如Home Page Address
和location of WordPress Site core files
)`WP_SITEURL` <--> `site_url()` <--> `siteurl` <--> Wordpress Address <--> /wordpress
`WP_HOME` <--> `home_url()` <--> `home` <--> Site Address <--> /
现在,这里变得棘手了!
如果您在
browser url to access WordPress home page
文件中定义了这些常量,无论您在“数据库/设置”页面中拥有什么值都没有关系。实际上,您将无法在后端修改该值(它会显示为灰色)。您仍然可以通过编辑数据库来进行修改,但是这样做不会对您的站点产生影响,而常量存在于wp-config文件中。
您的配置文件不会更改数据库中的值(或因此更改设置页)。相反,您的数据库/设置页面值将被忽略。 wp-config中的值将覆盖或优先于数据库设置。
所以...要打包(TLDR):
wp-config.php
其中WP常量的值优先于wp_options / WP设置值。
wp_options记录值和WP设置值相同。
编辑一个,根据定义编辑另一个。
这是访问同一变量的两种不同方式。
另一方面,WordPress常量是唯一且独立的。
内部,WordPress(PHP)常量会覆盖其db对应对象。
如果在wp-config中定义了常量,它不会更改数据库。
但是内部WordPress总是会选择使用/使用它的值而不是数据库值。
#4 楼
site_url()
和home_url()
功能相似,可能会导致工作方式混乱。 site_url()
函数检索数据库中siteurl
表中wp_options
的值。这是WordPress核心文件的URL。
如果是核心文件存在于Web服务器上的子目录
/wordpress
中,其值为http://example.com/wordpress
。 home_url()
函数检索数据库中home
表中wp_options
的值。 这是您希望人们访问以查看您的WordPress网站的地址。
如果WordPress核心文件存在于
/wordpress
中,但您希望网站URL为http://example.com
,则起始值应为http://example.com
。#5 楼
要回答您的第二个问题:Q:如果正确,那么我可以让wordpress返回http://example.com/吗?
您不能,除非您可以按照给WordPress自己的目录步骤进行操作。使用这种方法意味着您将WordPress核心文件放入
/blog
或/WordPress
,然后将index.php
放入根目录。 参考:
home_url()
的Codex index.php
的Codex提供Wordpress自己的目录#6 楼
不使用任何子目录(http://example.com/而不是http://example.com/blog)获取站点URL的最简单方法,例如,使用反斜杠/,如果您输入:
<a href="/">domain url</a>
它将创建一个链接,该链接将转到您的域
评论
感谢您的参与。不幸的是,这不能回答《任择议定书》提出的问题。人们需要使用OP询问的wordpress功能有很多原因。 OP不太可能只想通过html将链接添加到其主页,例如通过编辑帖子。 OP更有可能编辑php主题文件或插件文件。无论如何,他们使用的是php,而不是html。最后,虽然OP希望该站点的值不带/,但在另一个站点上,OP可能希望返回一个子目录。这取决于每个站点的WP配置。
– SherylHohman
19年1月5日在2:12
评论
您在一个非常重要的问题上一次要问两个问题。答案为“ home_url()和site_url()有什么区别?”不同于问题“我如何让WordPress返回没有安装子目录的URL根目录?”查看这些法典指南:codex.wordpress.org/…; codex.wordpress.org/…; codex.wordpress.org/…