web-dev-qa-db-ja.com

WordPressで動的な `home`と` siteurl`を設定するにはどうすればよいですか?

localeフィルターを使用して多言語設定を動的に構成します。言語を決定するためにサブドメイン名をフェッチするもの。

function load_custom_language($locale) {
    // get the locale code according to the sub-domain name.
    // en.mysite.com => return `en`
    // zh.mysite.com => return `zh_CN`
    // tw.mysite.com => return `zh_TW`
    // etc..
}
add_filter('locale', 'load_custom_language');

これはインデックスページでも機能しますが、別のページにリダイレクトすると、homesiteurlの設定により、常に元のサイトにリダイレクトされます(www.mysite.com)。

ですから、リクエストに応じてhomesiteurlをフィルタリングする動的な方法を見つけたいと思っています。これは、マイサイトに複数のサブドメインを使用する可能性があり、設定が1つしかないためです。 2つの設定。

11
Alfred Huang

Wp-config.phpファイルの管理者設定を上書きできます。したがって、動的なものが必要な場合は、次のように機能するはずです。

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_Host']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_Host']);

これは行の前に追加する必要があります

require_once(ABSPATH . 'wp-settings.php');

そうしないと、間違ったURLを使用しているコンテンツ、特にテーマファイルで問題が発生する可能性があります。

15
Steve

私は仕事を達成するための別のきれいな方法を見つけました:

カーネルのソースコードを確認したところ、各オプションにoption_xxxという個別のフィルターがあることがわかりました。

そのため、私のタスクでは、option_siteurlおよびoption_homeフィルターを使用して、ロードするオプションを保持し、ロードするオプションを防ぎ、SERVER_NAMEを維持しようとしました。

function replace_siteurl($val) {
    return 'http://'.$_SERVER['HTTP_Host'];
}
add_filter('option_siteurl', 'replace_siteurl');
add_filter('option_home', 'replace_siteurl');

この方法を使用すると、wp_config.phpファイルを変更する必要がなく、テーマやプラグインに簡単に追加できます。

4
Alfred Huang