我的理解是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/吗?

评论

您在一个非常重要的问题上一次要问两个问题。答案为“ home_url()和site_url()有什么区别?”不同于问题“我如何让WordPress返回没有安装子目录的URL根目录?”

查看这些法典指南:codex.wordpress.org/…; codex.wordpress.org/…; codex.wordpress.org/…

#1 楼

您一次要问两个问题:


home_url()site_url()有什么区别?
如何让WordPress返回没有安装子目录的URL根目录?

这是答案,我向WordPress的核心开发者Andrew Nacin确认,并进行了一些服务器测试以确认Andrew告诉我的内容。

问题#1

在通用> wp-admin的设置中,home_url()引用标有“站点地址(URL)”的字段。令人困惑,是吗?是的,它说“ Site Address”,所以您可以假设site_url(),但是您会错。运行您自己的测试,您会看到。 (您可以在主题函数的顶部将echo H1site_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.comwww.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_urlsite_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/wordpresssite_url的值

首先,让我注意home_urlsiteurl存储值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_HOMEWP_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.phpWordpress Site Address或类似的名称更显式,例如Home Page Addresslocation 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