Fungsi / filter WP untuk memodifikasi header http?

17

Apakah ada fungsi WP khusus, tindakan atau filter untuk digunakan saat menambahkan / memodifikasi header HTTP?

Untuk saat ini saya hanya mengaitkan tajuk PHP () panggilan ke pengait 'init' WP seperti ini:

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

Tetapi apakah ini cara yang benar untuk melakukan itu?

mikkelbreum
sumber

Jawaban:

9

Tindakan init adalah tempat yang salah untuk melakukannya. Tempat yang lebih baik adalah di template_redirect, sehingga Anda hanya memengaruhi tampilan ujung depan situs dan bukan area admin.

Otto
sumber
poin bagus mengenai kait, tetapi selain itu, apakah memanggil fungsi 'mentah' header () (menggunakan kait kanan) dengan cara yang benar, atau adakah pembungkus wp yang harus digunakan untuk ini? Memanggil tajuk secara langsung hanya memungkinkan untuk menambah tajuk, bukan memodifikasinya, seperti itu mungkin dilakukan dengan filter (seperti ketika Anda ingin memanipulasi kelas tubuh)
mikkelbreum
1
header () adalah satu-satunya cara. Namun, ia memiliki parameter kedua yang memungkinkan Anda mengganti tajuk yang ada alih-alih menambahkannya. Lihat php.net/manual/en/function.header.php
Otto
14

Ini kode yang saya gunakan, berdasarkan pertanyaan awal dan jawaban 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');

Setelah Anda menambahkan kode itu ke file functions.php Anda, Anda dapat memeriksanya bekerja dengan menjalankan tes di http://web-sniffer.net/ untuk memastikan header HTTP benar-benar berubah.

larangan geoengineering
sumber
11

Saya tahu ini sudah lama, tetapi jika orang lain menemukan ini, saya menemukan hook WordPress khusus untuk memodifikasi header HTTP. Kailnya wp_headersdan itu disebut di kelas wp .

Argumen pertama yang disahkan adalah array header dengan nama header sebagai kuncinya. Argumen kedua adalah referensi ke objek kelas wp.

Dominic P
sumber
Ada kait lain: send_headers. Saya tidak melihat "wp_headers" di daftar kait .
Pixeline
Hmm, itu menarik. Anda checkout filter wp_headers di sini.
Dominic P
Saya pikir (tetapi tidak yakin) bahwa ada kait "internal" (seperti wp_headers), dan kait "publik" (seperti "send_headers"). kait "internal" lebih rentan untuk diubah di rilis mendatang. kait "publik" dianggap lebih "stabil". Tapi saya mungkin saja salah di sini, saya tidak menemukan sumber untuk mendukung perasaan yang saya dapatkan dari berbagai penelitian yang saya lakukan pada kait.
Pixeline
Itu sangat mungkin, tetapi dalam hal ini sepertinya kedua kait hanya menjalankan fungsi yang berbeda. send_headersadalah tindakan yang menyala setelah tajuk dikirim sedangkan wp_headersfilter pada tajuk yang diterapkan sebelum dikirim.
Dominic P
baik ... jika fakta bahwa hanya send_headersmemiliki halaman codex adalah indikasi yang digunakan ...
drzaus
4

send_headersadalah metode yang lebih disukai daripada wp_headersuntuk situasi ini seperti yang ditunjukkan dalam naskah kuno .

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

Inilah penjelasan saya mengapa pada pertanyaan serupa.

Bryan Willis
sumber