回家路径()
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');