将多站点子站点中的站点URL和主页更新为HTTPS

时间:2018-03-01 作者:Galgóczi Levente

我想重写多站点子网站上的siteurl和主页选项。

在里面wp-admin/option.php 就是这样:

if ( !is_multisite() ) {
    if ( !defined( \'WP_SITEURL\' ) )
        $whitelist_options[\'general\'][] = \'siteurl\';
    if ( !defined( \'WP_HOME\' ) )
        $whitelist_options[\'general\'][] = \'home\';
    /** etc... **/
}
现在我尝试在我的主题中更新此选项functions.php 文件:

add_action( \'after_setup_theme\', \'update_forceurl\' );
function update_forceurl() {
    $xsiteurl   = get_site_url();
    $find       = array( \'http://\' );
    $replace    = \'https://\';
    $finalurl   = str_replace( $find, $replace, $xsiteurl );

    update_option( \'siteurl\', $finalurl );
    update_option( \'home\', $finalurl );
}

1 个回复
最合适的回答,由SO网友:Galgóczi Levente 整理而成

已解决:

将这些代码添加到函数中。您的子网站主题的php文件,紧跟在首字母“之后,并在使用之前阅读:https://codex.wordpress.org/Changing_The_Site_URL#Edit_functions.php

if ( ! is_admin() ) {
   $xsiteurl = get_option( \'home\' );
   $find = array( \'http://\', \'https://\' );
   if ( $find != \'http://\' ) {
        $replace = \'\';
        $pureaddress = str_replace( $find, $replace, $xsiteurl );
        $ssladdress = \'https://\' . $pureaddress . \'\';

        if ( $xsiteurl != $ssladdress  ) {
             update_option( \'siteurl\', \'\' . $ssladdress . \'\' );
             update_option( \'home\', \'\' . $ssladdress . \'\' );
        }
   }
}
注:最初最好的是get_option( \'siteurl\' ), 它决定了“$xsiteurl”,但这段代码已被弃用,wordpress建议使用它来代替site_url(), 因为“等效功能”,但这是错误的:如果在多站点上使用get\\u site\\u url(),那么在上使用https会怎么样。htaccess,wp配置。php和在网络上的home,如WP\\u SITEURL和WP\\u home,输出get_site_url() 将是https://subdomain.domain.com 即使此子网站真实(so/和默认)网站url和主页选项为:http://subdomain.domain.com. 因此:get_site_url() 几乎不等于get_option( \'siteurl\' )...

虽然你的。htaccess将您的子网站(在自己的siteurl和home选项上有http)重定向到https,这将正常工作,但会在您的网站上导致内容混合问题,因此,如果您的网络主页有指向子网站的链接,您的SSL将无法正常工作,您需要使用更好的搜索替换插件更正数据库中的此错误链接。。。

当我使用get_option( \'home\' ); 这使得home url选项的实际值不太可能get_site_url().

最后if ( $xsiteurl != $ssladdress ) 确保代码不会重复运行(请参阅wordpress codex链接),因此这是安全的。。。

最后一个“美中不足”,这段代码只有在有人打开站点(甚至是wp管理员,甚至是前端)时才会在站点上运行。。。因此,新的子网站默认的siteurl和home选项将保留为http,而此代码仅在代码用完后重写此默认值。。。(如果您创建一个新的子网站,这可能会导致混合内容问题,如果没有这个问题,请先打开此网站的后端或前端,然后从其他子网站广播此网站上的帖子…)

附言:我只是一名网页设计师,刚刚学习php,如果你知道这段代码有什么不好的地方,请写下来。

结束

相关推荐

https images not displaying

Setup嗨,伙计们!我有个奇怪的问题。我正在使用安装了ssl证书的wordpress Premium BeTheme。Problem问题是,虽然图像是用https上传到网站上的,但它们没有显示出来。如果我手动将图像的URL从https切换到http,它们就会开始显示。What I have done?我尝试过在internet上卸载ssl证书和几乎所有的解决方案,但都没有解决。Here is the URL of the website : https://uptimeelite.com/