回家路徑()
get_home_path()
和 ABSTPATH
之間的重要區別
如果你在子資料夾中安裝了 WordPress,請記住 ABSPATH
和 get_home_path()
之間的區別。
get_home_path()
函式將始終返回沒有子資料夾的路徑 :
- http://www.example.com - / var / www / htdocs / example
- http://www.example.com/wp - / var / www / htdocs / example
這就是它與 ABSPATH
的不同之處,ABSPATH
將返回不同的值:
- http://www.example.com - / var / www / htdocs / example
- http://www.example.com/wp - / var / www / htdocs / example / wp
ABSPATH
首先在 wp-load.php
中定義,它將位於/var/www/htdocs/example/wp/wp-load.php
,因此這是 ABSPATH
將從中定義的地方。
get_home_path()
檢查 site_url
和 home_url
是否不同,並從路徑中刪除子字串。否則返回 ABSPATH
值:
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 );
}
在程式碼中使用它
呼叫 get_home_path()
必須在已包含 wp-admin/includes/file.php
的環境中完成。
例如在 admin_init
鉤子中使用 get_home_path()
很好,但在 init
中使用它不會導致 PHP 致命錯誤:
Call to undefined function get_home_path()
此檔案僅包含在 admin(儀表板)上下文中,如果你在此上下文之外絕對需要它,則需要在呼叫函式之前自己包含該檔案:
require_once(ABSPATH . 'wp-admin/includes/file.php');