問題描述
get_home_path()與 ABSPATH 有什麼區別?兩點都不指向 WordPress 的安裝根?
最佳解決方案
他們應該做同樣的事情,但在某些情況下,可能不會。
首先注意:
-
codex 條目描述是有誤導性的
-
wp-admin/includes/file.php必須包含在上下文中,否則呼叫get_home_path()將導致呼叫未定義的函式。
關於食典進口,
Description
Get the absolute filesystem path to the root of the WordPress installation.
Return Value
Full filesystem path to the root of the WordPress installation. If you install wordpress in subfolder, it will show subfolder location
Examples
$path = get_home_path(); print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
它宣告如果您在 sub-directory 中安裝了 WordPress,返回值將返回子資料夾的路徑。這其實是錯誤的。
get_home_path()將返回您的 WordPress 安裝的根目錄,即使它安裝在 sub-directory 中。這就是功能的目的。
假設您的 WordPress 安裝在名為/dev 的 sub-directory 中,
-
http://www.example.com/dev(
site_url)(例如/var /www /htdocs /dev) -
http://www.example.com/(
home_url)
如果您登入到 ABSPATH,那麼其結果將是/var/www/htdocs/dev,而不是您安裝的根目錄。您的安裝根是/var/www/htdocs 。
ABSPATH 首先在 wp-load.php 中定義,其位於/var/www/htdocs/dev/wp-load.php,因此這是 ABSPATH 將從其定義的位置。
如果您進一步檢查 get_home_path(),您將會注意到,如果 site_url 和 home_url 不同,則採用由字串中發現的 sub-directory 的位置 (首次發生) 控制的路徑的 sub-string 。
function get_home_path() {
$home = set_url_scheme( get_option( 'home' ), 'http' );
$siteurl = set_url_scheme( get_option( 'siteurl' ), 'http' );
if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) {
$wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); /* $siteurl - $home */
$pos = strripos( str_replace( '\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) );
$home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos );
$home_path = trailingslashit( $home_path );
} else {
$home_path = ABSPATH;
}
return str_replace( '\', '/', $home_path );
}
因此,如果您將 WordPress 安裝在 sub-directory 中,get_home_path()和 ABSPATH 可能會返回不同的結果。
其次,呼叫 get_home_path()必須在已經包含所提及的 wp-admin/includes/file.php 的上下文中完成。
作為使用 admin_init admin_init 中的 get_home_path()鉤子的一個例子,在 init 中使用它是不錯的。
看到這個檔案只能從管理 (儀錶板) 上下文中包含,如果你絕對需要它在這個上下文之外,你需要在呼叫該函式之前自己包括這個檔案,
require_once(ABSPATH . 'wp-admin/includes/file.php');
諷刺的是 (或不) 使用 ABSPATH:D
參考文獻
注:本文內容整合自 google/baidu/bing 翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:gxnotes#qq.com(#替換為 @) 。