How to set dynamic `home` and `siteurl` in WordPress?

夙愿已清 提交于 2019-12-20 18:43:14

问题


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.


回答1:


You can override the admin settings in the wp-config.php file. So if you want something dynamic, the following should work:

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

This needs to added before the line

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

or else you may have problems with some content using the wrong URLs, especially theme files.




回答2:


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 and option_home filter to hold that options to load, just to prevent the option to load, maintaining the SERVER_NAME it has:

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

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.



来源:https://stackoverflow.com/questions/26014426/how-to-set-dynamic-home-and-siteurl-in-wordpress

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!