GET_HOME_PATH()和ABSPATH有什么不同?

时间:2015-05-15 作者:Borek Bernard

两者的区别是什么get_home_path()ABSPATH? 这两者的目的不是都指向WordPress安装根目录吗?

2 个回复
最合适的回答,由SO网友:Adam 整理而成

他们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_urlhome_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

SO网友:mdikici

我正在使用home_url() 用于链接到WP的“主页”。有时site_url() 可能不是你的home_url(). 您可以在Wordpress中将特定页面定义为主页。

结束

相关推荐

无法重新声明wp_update_core()

我想就在WordPress更新之后,我们无法访问wp管理员登录了。Fatal error: 无法重新声明wp_update_core() (之前在C:\\DWASFiles\\Sites\\pyromaitre\\VirtualDirectory0\\site\\wwwroot\\wp admin\\includes\\update.php:288中声明)在C:\\DWASFiles\\Sites\\pyromaitre\\VirtualDirectory0\\site\\wwwroot\\wp admi