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');
これはインデックスページでも機能しますが、別のページにリダイレクトすると、home
とsiteurl
の設定により、常に元のサイトにリダイレクトされます(www.mysite.com
)。
ですから、リクエストに応じてhome
とsiteurl
をフィルタリングする動的な方法を見つけたいと思っています。これは、マイサイトに複数のサブドメインを使用する可能性があり、設定が1つしかないためです。 2つの設定。
Wp-config.phpファイルの管理者設定を上書きできます。したがって、動的なものが必要な場合は、次のように機能するはずです。
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_Host']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_Host']);
これは行の前に追加する必要があります
require_once(ABSPATH . 'wp-settings.php');
そうしないと、間違ったURLを使用しているコンテンツ、特にテーマファイルで問題が発生する可能性があります。
私は仕事を達成するための別のきれいな方法を見つけました:
カーネルのソースコードを確認したところ、各オプションに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
ファイルを変更する必要がなく、テーマやプラグインに簡単に追加できます。