Saya telah melihat wp_headers
dan send_headers
keduanya digunakan sebelumnya untuk hal yang sama dan saya bertanya-tanya bagaimana Anda bisa tahu mana yang harus digunakan dan kapan ...
Pada send_headers
halaman codex ada contoh menambahkan X-UA-Compatible: IE=edge,chrome=1
kompatibilitas mundur untuk Internet Explorer karena tag meta sering gagal di situs intranet jika dimuat terlambat .
Seperti inilah send_headers
contohnya:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
Namun wp_headers
dapat juga melakukan ini:
apply_filters ( 'wp_headers', array $headers, WP $this )
add_filter( 'wp_headers', 'wpieeam_headers' );
function wpieeam_headers($headers) {
if (!is_admin()) {
$headers['X-UA-Compatible'] = 'IE=edge,chrome=1';
}
return $headers;
}
Pembaruan: Saya sebenarnya baru saja memperhatikan bahwa percakapan tentang ini kurang lebih dimulai dengan pertanyaan serupa beberapa tahun yang lalu ...
Juga, apakah send_headers hanya ada hubungannya dengan front end? Saya telah melihat wp_headers melakukan pemeriksaan seperti ini:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
dan
if (!is_admin())
jadi saya berpikir bahwa mungkin send_headers
tidak perlu melakukan pemeriksaan itu ...
sumber
Jawaban:
Ok jadi saya pikir saya menemukan jawabannya ...
Keduanya berfungsi sebagian besar seperti yang Anda harapkan dengan mengirim header http / php ke browser.
wp_headers
sebenarnya adalah filter di dalamsend_headers()
fungsi. Anda dapat menggunakan ini untuk memodifikasi header sebelum dikirim ke browser dengan beberapa pengecualian.wp_headers
tidak akan dapat melakukan apa pun jika itu adalah halaman cache statis yang berurusan dengan ...Di sinilah
send_headers
kait berperan. Setelahwp_headers
filter,send_headers()
fungsi memeriksa apakahLast-Modified
telah dikirim dengan akan memberi tahu kami jika halaman itu di-cache atau tidak dan kemudian memungkinkan kami menghubungkannya setelah caching, tipe konten, dll semuanya telah dikirim.Jadi untuk contoh saya menggunakan
X-UA-Compatible
, sementara keduanya bekerja, saya cenderung menggunakansend_headers
. Mengapa? Untuk satu jika Anda menambahkan keduanya,send_headers
akan menang setiap waktu dan akan memastikan bahwa itu dimuat bahkan jika ditambahkan setelah halaman di-cache.Meskipun menggunakan
<meta>
tag seperti halnya banyak kerangka kerja populer yang digunakan juga akan berfungsi untuk kompatibel dengan x-ua, itu tidak akan berfungsi di banyak browser kecuali dimuat segera setelah tag head pembuka. Ini disebabkan oleh berbagai alasan seperti jika pengaturan "intranet" disetel ke jaringan yang luas . Untuk alasan ini menggunakan metode php lebih aman. Namun, jika Anda menambahkan keduanya, tag meta akan menang (dengan asumsi itu termasuk cukup awal.Sehubungan dengan
X-UA-Compatible
kompatibilitas, saya berharap ini tidak akan relevan segera karena Microsoft akan menjatuhkan dukungan untuk versi IE yang lebih lama minggu depan!Juga, saya menguji
wp_headers
filter tanpa menggunakanis_admin()
cek dan itu tidak akan mengubah admin_headers sehingga pemeriksaan tidak perlu.Jika Anda memang perlu memodifikasi header admin untuk beberapa alasan, saya tahu Anda bisa melakukannya seperti ini, tetapi saya tidak yakin apakah itu akan berhasil sepanjang waktu ...
Jawaban Diperbarui berdasarkan saran Toscho untuk memeriksa admin:
sumber
is_admin() || add_action( … )
, karena tidak perlu mencemari daftar panggilan balik terdaftar jika Anda tidak membutuhkannya.send_headers
Akan menang setiap waktu dan akan memastikan bahwa itu dimuat bahkan jika ditambahkan setelah halaman di-cache" - Hanya untuk dicatat bahwasend_headers
tidak berfungsi untuk mengalahkan cache halaman yang digunakan oleh plugin seperti W3 Total Cache dalam pengujian saya, atau caching statis yang secara efektif mem-bypass WordPress di tingkat server.