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