他们should 做同样的事情,但在某些条件下,可能不会。
首先,请注意:
如果codex 条目描述具有误导性wp-admin/includes/file.php
必须包含在上下文中,否则调用get_home_path()
将导致调用未定义的函数关于codex条目,
说明
获取WordPress安装根目录的绝对文件系统路径。
返回WordPress安装根目录的完整文件系统路径。如果在子文件夹中安装wordpress,它将显示子文件夹位置
示例
$path = get_home_path();
print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder
它表示,如果您在子目录中安装了WordPress,则返回值将返回子文件夹的路径。事实上,这是不正确的。
get_home_path()
将返回WordPress安装的根目录,即使它安装在子目录中。这就是函数的目的。
假设您的WordPress安装在名为/dev
,
如果您将呼叫记录到
ABSPATH
, 那么结果将是,
/var/www/htdocs/dev
这是
not 安装的根目录。安装的根目录是
/var/www/htdocs
.
ABSPATH
首次定义于wp-load.php
将位于/var/www/htdocs/dev/wp-load.php
因此这就是ABSPATH
将采用其定义。
如果您检查get_home_path()
此外,您会注意到,如果site_url
和home_url
不同,则子字符串采用由字符串中找到的子目录的位置(第一次出现)控制的路径。
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()
和
ABSPATH
如果在子目录中安装了WordPress,可能会返回不同的结果。
第二,呼叫get_home_path()
必须在上述情况下进行wp-admin/includes/file.php
已包含。
例如,使用get_home_path()
在admin_init
钩子在内部使用时很好init
不是。
由于此文件只能从admin(dashboard)上下文中包含,如果您确实需要此上下文之外的文件,则需要在调用函数之前自己包含该文件,
require_once(ABSPATH . \'wp-admin/includes/file.php\');
讽刺的是(或不是)使用
ABSPATH
:D