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

前端 未结 3 471
难免孤独
难免孤独 2021-02-05 17:50

I config the multi-language setting dynamically using the locale filter. Which fetch the sub-domain name to determine the language.

function load_cu         


        
相关标签:
3条回答
  • 2021-02-05 18:12

    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.

    0 讨论(0)
  • 2021-02-05 18:23

    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.

    0 讨论(0)
  • 2021-02-05 18:33

    To set dynamically the domain and as well as the protocol (http or https), use:

    // Identify the relevant protocol for the current request
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https" : "http";
    
    // Set SITEURL and HOME using a dynamic protocol.
    define('WP_SITEURL', $protocol . '://' . $_SERVER['HTTP_HOST']);
    define('WP_HOME', $protocol . '://' . $_SERVER['HTTP_HOST']);
    
    0 讨论(0)
提交回复
热议问题