get_home_path()とABSPATHの違いは何ですか?


27

違いは何だget_home_path()とはABSPATH?両方のポイントがWordPressインストールルートを指しているのではないでしょうか?

回答:


33

彼ら同じことをすべきですが、特定の条件下ではそうではないかもしれません。

まず最初に:

コーデックスエントリについては、

説明

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はありません。インストールのルートは/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 を使用する


よく説明されていますが、サードパーティの開発者は定数も関数も使用すべきではないと思います。WordPressはどこにでも配置できるため、ドキュメントルートの外側に配置すると、定数と関数の両方が、たとえばの/var/apps/wordpress代わりにを返し/var/www/htdocsます。$_SERVER['DOCUMENT_ROOT']少なくとも、ドキュメントルートが変更されないことを保証できる場合は、を使用してください。
フルーフ

@Fleuv実際、これはトリッキーなものです... $_SERVER['DOCUMENT_ROOT']問題さえあります...例えば、正しく設定または設定されないなどです。これを処理する他の方法も考えられます...それぞれ独自の注意事項があります。非常に楽しい:)
アダムアダム

1
このソリューションは、WPが「定義されていない」エラーをスローした後、適切に説明され、希望どおりに機能しました。ありがとう;)
クリス・スプレーグ

-1

WPの「ホーム」ページへのリンクにhome_url()を使用しています。時には、SITE_URLは()本当にあなたではないかもしれない)(HOME_URL。特定のページをWordpressのホームページとして定義できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.