違いは何だ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']少なくとも、ドキュメントルートが変更されないことを保証できる場合は、を使用してください。