ฟังก์ชัน WP / ตัวกรองสำหรับการปรับเปลี่ยนส่วนหัว http?


17

มีฟังก์ชั่น WP เฉพาะการกระทำหรือตัวกรองที่จะใช้เมื่อเพิ่ม / แก้ไขส่วนหัว HTTP หรือไม่

ตอนนี้ฉันแค่ขอให้หัว PHP () เรียกเข้าเบ็ด WP 'init' เช่นนี้

add_action('init', 'add_header_xua');
function add_header_xua(){
    if(!is_admin()){
        header('X-UA-Compatible: IE=edge,chrome=1');    
    }
}

แต่นี่เป็นวิธีที่ถูกต้องหรือไม่

คำตอบ:


9

การดำเนินการเริ่มต้นเป็นสิ่งที่ผิดที่ต้องทำ ที่ที่ดีกว่าคือที่ template_redirect ดังนั้นคุณจะมีผลกับมุมมองส่วนหน้าของไซต์เท่านั้น


จุดที่ดีเกี่ยวกับตะขอ แต่นอกเหนือจากนั้นจะเรียกส่วนหัว 'raw' () ฟังก์ชั่น (ใช้ตะขอขวา) วิธีที่ถูกต้องหรือมีเสื้อคลุม wp ที่ควรจะใช้สำหรับเรื่องนี้? การเรียกส่วนหัวโดยตรงอนุญาตเฉพาะการเพิ่มส่วนหัวไม่แก้ไขพวกเขาเช่นมันจะเป็นไปได้ด้วยตัวกรอง (เช่นเมื่อคุณต้องการจัดการระดับร่างกาย)
mikkelbreum

1
header () เป็นวิธีเดียว อย่างไรก็ตามมันมีพารามิเตอร์ตัวที่สองที่จะช่วยให้คุณแทนที่ส่วนหัวที่มีอยู่แทนที่จะเพิ่มลงในพวกเขา ดูphp.net/manual/en/function.header.php
อ็อตโต

14

นี่คือรหัสที่ฉันใช้ตามคำถามเดิมและตามคำตอบของ Dominic P ...

/*
 * Modify HTTP header
 */
function add_header_xua($headers) {

    // var_dump($headers); #=> if you want to see the current headers...  

    if (!is_admin()) {
        $headers['X-UA-Compatible'] = 'IE=edge,chrome=1';    
    }

    return $headers;     
}
add_filter('wp_headers', 'add_header_xua');

เมื่อคุณเพิ่มรหัสนั้นลงในไฟล์ functions.php ของคุณแล้วคุณสามารถตรวจสอบได้ว่าทำงานได้หรือไม่โดยใช้การทดสอบที่http://web-sniffer.net/เพื่อให้แน่ใจว่าส่วนหัว HTTP นั้นเปลี่ยนไปอย่างแน่นอน


11

ฉันรู้ว่ามันใช้เวลาสักพัก แต่ถ้ามีคนอื่นสะดุดกับสิ่งนี้ฉันพบว่า WordPress hook ทำการแก้ไขส่วนหัว HTTP โดยเฉพาะ ตะขอเป็นwp_headersและก็เรียกว่าอยู่ในระดับ WP

อาร์กิวเมนต์แรกที่ส่งผ่านคืออาร์เรย์ของส่วนหัวที่มีชื่อส่วนหัวเป็นคีย์ อาร์กิวเมนต์ที่สองเป็นการอ้างอิงไปยังวัตถุคลาส wp


มีตะขออีกอัน: send_headers. ฉันไม่เห็นใด ๆ "wp_headers" บนรายการเบ็ด
pixeline

อืมนั่นน่าสนใจ คุณเช็คเอาต์ตัวกรอง wp_headersที่นี่
Dominic P

ฉันคิดว่า (แต่ไม่แน่ใจ) ว่ามี hooks "ภายใน" (เช่น wp_headers) และ hooks "สาธารณะ" (เช่น "send_headers") hooks "ภายใน" มีแนวโน้มที่จะเปลี่ยนแปลงได้ในรุ่นต่อ ๆ ไป hooks "สาธารณะ" จะถือว่า "เสถียร" มากกว่า แต่ฉันอาจจะผิดที่นี่ฉันไม่พบแหล่งที่มาเพื่อสำรองความรู้สึกที่ฉันได้รับจากงานวิจัยต่าง ๆ ที่ฉันทำใน hooks
pixeline

เป็นไปได้มาก แต่ในกรณีนี้ดูเหมือนว่าสอง hooks จะทำหน้าที่ต่างกัน send_headersคือการดำเนินการที่ fires หลังจากที่ส่งส่วนหัวในขณะที่wp_headersเป็นตัวกรองบนส่วนหัวที่ใช้ก่อนที่จะถูกส่ง
Dominic P

ดี ... หากความจริงที่ว่าsend_headersมีเพียงหน้า codex เป็นข้อบ่งชี้ใด ๆ ที่จะใช้ ...
drzaus

4

send_headersเป็นวิธีที่ต้องการมากกว่าwp_headersสำหรับสถานการณ์นี้แสดงให้เห็นว่าในCodex

is_admin() || add_action('send_headers', function(){ 
    header('X-UA-Compatible: IE=edge,chrome=1'); 
}, 1);

นี่คือคำอธิบายของฉันสำหรับเหตุผลในคำถามที่คล้ายกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.