How to set dynamic `home` and `siteurl` in WordPress?
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.
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.