web-dev-qa-db-ja.com

データベースが切断されている場合にサイトのURLを取得する方法

最近、私はあなたがwp-contentディレクトリに " データベース接続を確立するためのエラーを監視する方法 "からdb-error.phpファイルを含めることができることに気づきました。これは既存のWordPressデータベースエラーメッセージを何かカスタムに置き換えます。私はdb-error.phpのようにリダイレクトをすることについて考えました:

header("Location: http://vader.com/saber.html");
exit();

しかし、私はhttp://vader.comをサイトのURLに置き換えてポータブルにできるようにしたかったのですが、調査の結果、接続なしでサイトのURLを取得する方法が見当たらず、ディスカッションごとにwpに最小限の変更を加えることを望みました。設定ファイルヘッダーのリダイレクトに使用される可能性があるデータベース接続なしでサイトのURLを取得する方法はありますか?

1つの選択肢は、サイトのURLをwp-config.phpファイル自体に設定することです。これは、データベースに保存されているsiteurlオプションを効果的に上書きしますが、クエリを実行せずにURLを参照できることも意味します。

From コーデックス

Wp-config.phpファイルでサイトのURLを手動で設定することは可能です。

これら2行をあなたのwp-config.phpに追加してください。ここで、 "example.com"はあなたのサイトの正しい場所です。

define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');

その後、通常のテーマでsiteurlまたはhomeオプションをチェックするコードを使用すると、データベースではなく定数から取得されます(したがって、上記のオーバーライドについての注意点)。しかし、デフォルトのエラースクリプトでは、直接WP_SITEURLを参照してリダイレクトURLを作成できます。

2
EAMann

まあDBエラーは要求されたサイトから来なければなりません。それでは、なぜSuperglobal $ _SERVERを使用してHTTPホストを入手しないでください。

header("Location: https://" . $_SERVER['HTTP_Host'] ); //Redirect to root

exit(); //Exit 
1
Dhul Wells

WordPressは正しいURLが何であるかを「伝える」ために設定に依存しています。これは、データベースオプションまたはそれをオーバーライドするWP_HOME定数である可能性があります。カスタムサイトの場合、wp-config.phpに定数を設定するのが一般的な方法ですが、DBオプションをまったく気にする必要はありません。

設定なしで 決定 /その情報にする専用のWP AP​​I関数(私が覚えている)がないので、一般的なケースはより複雑です。

私がソースで考えることができる最も近いルーチンはRELOCATEモードが設定されているときです、そしてそれは明示的にURL設定が信頼できず、現在の状態から更新されるべきであることをWPに伝えます.

wp-login.phpの関連コードは以下のとおりです。

if ( defined( 'RELOCATE' ) && RELOCATE ) { // Move flag is set
    if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
        $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );

    $url = dirname( set_url_scheme( 'http://' .  $_SERVER['HTTP_Host'] . $_SERVER['PHP_SELF'] ) );
    if ( $url != get_option( 'siteurl' ) )
        update_option( 'siteurl', $url );
}

そのため、全体的に設定にアクセスすることなく、残りのオプションは$_SERVERコンテキストになります。これは、あまり信頼できません。

0
Rarst