get_home_path()
とABSPATH
の違いは何ですか?両者の意味がWordPressのインストールルートを指しているのではないですか?
彼らはshouldは同じことをしますが、特定の条件下ではそうではありません。
まず最初に:
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
への呼び出しをログに記録すると、その結果は、インストールのルートであるnot/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
が既に含まれているコンテキストで実行する必要があります。
例として、admin_init
フック内で get_home_path()
を使用するのは問題ありませんが、init
内で使用するのは適切ではありません。
このファイルは管理(ダッシュボード)コンテキスト内からのみインクルードされるため、このコンテキスト外で絶対に必要な場合は、関数を呼び出す前に自分でファイルをインクルードする必要があります。
require_once(ABSPATH . 'wp-admin/includes/file.php');
皮肉なことに(またはそうではない)、ABSPATH
を使用します:D