如何更新Wordpress ajaxurl变量以使用SSL?

时间:2014-09-11 20:12:39

标签: ajax wordpress ssl https wordpress-4.0

我们运行Wordpress 4.0 / Buddypress设置,自从我们切换到SSL后,所有ajax函数都无法正常工作,因为ajaxurl变量仍在读取“http”。

<script type="text/javascript">
 /* <![CDATA[ */
 var ajaxurl = 'http://website.com/wp-admin/admin-ajax.php';
 /* ]]> */
</script>

此代码会自动添加到wp_head中,因此我们不确定如何更新它。我们只需要将http切换为https。

有谁知道我们如何做到这一点?

我们每次需要ajax时都会收到此错误: [已屏蔽]“https://website.com/users”页面是通过HTTPS加载的,但是运行了来自“{{3”的不安全内容}:'此内容也应通过HTTPS加载。

2 个答案:

答案 0 :(得分:3)

ajaxurl变量从admin_url()函数获取其值,该函数反过来根据is_ssl()函数的结果确定是否执行https

因此,基本上,如果您的https未获得ajaxurl,则is_ssl()功能无法正确检测您网站上的SSL。

如果您支持负载均衡器或支持HTTP_X_FORWARDED_PROTO的反向代理(如ELB),请根据文档将以下内容添加到wp-config.php

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
     $_SERVER['HTTPS'] = 'on';

如果这不起作用,请查看gist文档中is_ssl()链接的{{1}}。您应该将它添加到您的插件目录。

答案 1 :(得分:1)

我也有Wordpress的这个问题,特别是因为我使用CloudFlare Flexible SSL。

我在/wp-includes/load.php

上做了这个快速而又脏的补丁
function is_ssl() {
        if ( isset( $_SERVER['HTTP_CF_VISITOR'] ) ) {
            if ( strpos($_SERVER['HTTP_CF_VISITOR'], "https") !== "false" ){
                return true;
            }
        }

        if ( isset( $_SERVER['HTTPS'] ) ) {
                if ( 'on' == strtolower( $_SERVER['HTTPS'] ) ) {
                        return true;
                }

                if ( '1' == $_SERVER['HTTPS'] ) {
                        return true;
                }
        } elseif ( isset($_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
                return true;
        }
        return false;
}

这有助于管理员调用阻止大量插件功能的ajax调用。