问题描述

我的理解是 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()有什么区别?
  2. 如何让 WordPress 返回 URL 根,而不安装它的子目录?

这是答案,我确认了 WordPress 的核心开发人员安德鲁·纳辛,并进行了一些服务器测试,以确认安德鲁告诉我什么。

问题#1

一般> wp-admin 的设置,home_url() 引用标记为 「站点地址 (URL)」 的字段。困惑,嗯?是的,它说 「站点地址」,所以你可以假设 site_url(),但你会错了。运行自己的测试,你会看到。 (您可以暂时放置一个带有 site_url() 和 home_url() 值的 echo H1 字段在您的主题的 functions.php 的顶部) 。

同时,site_url()引用了一般标题为 「WordPress 地址 (URL)」 的字段> 设置。

因此,如果您想要引用物理路径可能会如何在 URL 上调用插件的文件夹路径来加载映像,或者调用主题的文件夹路径来加载映像,则应该实际使用其他函数 – 看看 plugins_url()get_template_directory_uri()

site_url()将始终是通过/wp-admin 最终到达现场的位置,而 home_url()将无法可靠地位于该位置。

home_url()将通过设置 General> 设置您的主页。设置 「站点地址 (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;
}

次佳解决方案

如果您希望 WP 安装在目录中,但是您的域根目录中的站点位于主目录,则需要将主要的 index.php 文件移动到您的域根,并编辑 require 语句以指向目录。

此过程概述如下:Giving WordPress Its Own Directory

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。