Answers:
他们应该做同样的事情,但在某些情况下可能不行。
首先请注意:
wp-admin/includes/file.php
必须包括在其他情况下调用get_home_path()
将导致调用一个未定义的函数。关于法典条目,
描述
获取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
,
site_url
)(例如/ var / www / htdocs / dev)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
不同,那么将采用由字符串中找到的子目录的位置(首次出现)所控制的路径的子字符串。
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 get_home_path()
,则ABSPATH
可能会返回不同的结果。
其次,呼叫get_home_path()
必须在wp-admin/includes/file.php
已经包含上述注意事项的情况下进行。
作为一个例子get_home_path()
,在admin_init
钩子内使用很好,而在钩子内使用init
则不行。
鉴于此文件仅从admin(仪表板)上下文中包含,因此,如果您绝对需要此文件,则需要在调用该函数之前自己包含该文件,
require_once(ABSPATH . 'wp-admin/includes/file.php');
具有讽刺意味的(或不)使用ABSPATH
:D
$_SERVER['DOCUMENT_ROOT']
的问题,甚至存在问题...例如可能未正确设置或正确设置等等。我也可以想到其他方法来解决此问题……每种方法都有自己的警告。非常有趣:)
/var/apps/wordpress
而不是/var/www/htdocs
。$_SERVER['DOCUMENT_ROOT']
至少使用,至少可以确保文档根目录不会更改。