違いは何だget_home_path()
とはABSPATH
?両方のポイントがWordPressインストールルートを指しているのではないでしょうか?
違いは何だget_home_path()
とはABSPATH
?両方のポイントがWordPressインストールルートを指しているのではないでしょうか?
回答:
彼らは同じことをすべきですが、特定の条件下ではそうではないかもしれません。
まず最初に:
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 );
}
したがって、この結果として、get_home_path()
そしてABSPATH
あなたはWordPressのサブディレクトリにインストールされている場合は、異なる結果を返すことがあります。
第二に、呼び出しget_home_path()
は、前述の説明wp-admin/includes/file.php
がすでに含まれている状況で行われなければなりません。
例として、フックget_home_path()
内での使用admin_init
は問題ありinit
ませんが、フック内での使用は問題ありません。
このファイルは管理(ダッシュボード)コンテキスト内からのみインクルードされるため、このコンテキスト外で絶対に必要な場合は、関数を呼び出す前に自分でファイルをインクルードする必要があります。
require_once(ABSPATH . 'wp-admin/includes/file.php');
皮肉なことに(またはそうではない)ABSPATH
:D を使用する
$_SERVER['DOCUMENT_ROOT']
問題さえあります...例えば、正しく設定または設定されないなどです。これを処理する他の方法も考えられます...それぞれ独自の注意事項があります。非常に楽しい:)
/var/apps/wordpress
代わりにを返し/var/www/htdocs
ます。$_SERVER['DOCUMENT_ROOT']
少なくとも、ドキュメントルートが変更されないことを保証できる場合は、を使用してください。