จะอัพเดตตัวแปร 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: [blocked] หน้าที่ 'https://website.com/users' ถูกโหลดผ่าน HTTPS แต่ใช้งานเนื้อหาที่ไม่ปลอดภัยจาก 'http://website.com/wp-admin/admin-ajax.php': เนื้อหานี้ควรโหลดผ่าน HTTPS ด้วย


person FLUXXUATE    schedule 11.09.2014    source แหล่งที่มา
comment
ใครมีคำแนะนำเกี่ยวกับเรื่องนี้บ้างไหม?   -  person FLUXXUATE    schedule 23.09.2014


คำตอบ (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() คุณควรเพิ่มสิ่งนั้นลงในไดเร็กทอรีปลั๊กอินของคุณ

person Logan    schedule 25.10.2014

ฉันยังประสบปัญหานี้กับ Wordpress โดยเฉพาะอย่างยิ่งเนื่องจากฉันใช้ CloudFlare Flex 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 จากผู้ดูแลระบบที่บล็อกการทำงานของปลั๊กอินจำนวนมาก

person Nick M    schedule 27.10.2017