問題描述

我的理解是 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。