Как обновить переменную WordPress ajaxurl для использования SSL?

Мы запускаем установку 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, но при этом запускался небезопасный контент с http://website.com/wp-admin/admin-ajax.php': этот контент также должен быть загружен через HTTPS.

2 ответа

ajaxurl переменная получает свое значение от функции admin_url(), которая, в свою очередь, выясняет, стоит ли делать https на основе результата функции is_ssl().

Так что, в принципе, если вы не получаете 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() документация. Вы должны добавить это в каталог плагинов.

У меня также есть эта проблема с 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 от администратора, которые блокировали множество функций плагинов.

Другие вопросы по тегам