I config the multi-language setting dynamically using the locale
filter. Which fetch the sub-domain name to determine the language.
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');
That works for the index page, but when I redirect to another page, because of the settings of home
and siteurl
, it always redirects my site to the original one (www.mysite.com
).
So I’m curious to find a dynamic way to filter the home
and siteurl
according to the request, because I might use more than one sub-domain for mysite and I have only one settings for the two settings.
You can override the admin settings in the wp-config.php file.
So if you want something dynamic, the following should work:
This needs to added before the line
or else you may have problems with some content using the wrong URLs, especially theme files.
I’ve found another pretty way to achieve the work:
After I checked for the source code of the kernel, I found that there are distinct filters called
option_xxx
on each options.So, for my task, I tried to use the
option_siteurl
andoption_home
filter to hold that options to load, just to prevent the option to load, maintaining theSERVER_NAME
it has:Using this way, it has no need to change the
wp_config.php
file, and can be easily add to a theme or a plugin.To set dynamically the domain and as well as the protocol (http or https), use: