wp_headers vs send_headers. Her biri ne zaman kullanılır?


10

Gördüm wp_headersve send_headersher ikisi de daha önce aynı şey için kullandım ve hangisini ne zaman kullanacağınızı nasıl bildiğinizi merak ediyorum ...

Açık send_headerskodeks sayfa eklemeye bir örnektir var X-UA-Compatible: IE=edge,chrome=1meta etiketi genellikle beri Internet Explorer geriye dönük uyumluluk için çok geç yüklenen eğer intranet sitelerinde başarısız .

Bu send_headersörnek şöyle görünür:

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

Ancak wp_headersbunu da yapabilir:

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;
}

Güncelleme: Aslında bu konudaki bir konuşmanın birkaç yıl önce benzer bir soru üzerinde başladığını fark ettim ...

Ayrıca, send_headers'ın yalnızca kullanıcı arabirimi ile ilgisi var mı? Ben wp_headers böyle çekler gördüm:

if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )

ve

if (!is_admin()) 

bu yüzden send_headersbu kontrolleri yapmak zorunda olmadığını düşünüyorum ...


1
Genel olarak konuşursak, biri bir eylem, diğeri bir filtredir. Eylemler, bir olay meydana geldiğinde bir şey yapmak içindir ve bir filtre kullanılmadan önce bir şeyi değiştirmek içindir.
Milo

Yanıtlar:


9

Tamam, sanırım anladım ...

Bunların her ikisi de tarayıcıya http / php üstbilgileri göndererek beklediğiniz gibi çalışır. wp_headersaslında send_headers()işlevleri içinde bir filtredir.Bunu istisnalar dışında tarayıcıya gönderilmeden önce üstbilgileri değiştirmek için kullanabilirsiniz. wp_headersönbelleğe alınmış statik bir sayfayla ilgileniyorsa hiçbir şey yapamayacak ...

İşte bu noktada send_headerskanca devreye giriyor. wp_headersFiltreden sonra, send_headers()işlevin Last-Modifiedgönderilip gönderilmediğini kontrol eder , sayfanın önbelleğe alınıp alınmadığını söyler ve ardından önbelleğe alma, içerik türü vb. Gönderildikten sonra içine girmemizi sağlar.

Yani benim örneğim için X-UA-Compatible, ikisi de çalışırken, kullanmaya meyilliyim send_headers. Neden? Birincisi, her ikisini de ekleyecekseniz, send_headersher seferinde kazanır ve sayfa önbelleğe alındıktan sonra eklenmiş olsa bile yüklenmesini sağlar.

Birçok popüler çerçeve kullanımı<meta> gibi bir etiketi kullanmak x-ua uyumlu için de çalışırken, açılış başlığı etiketinden hemen sonra yüklenmedikçe birçok tarayıcıda çalışmaz. Bunun nedeni, "intranet" ayarının geniş ağa ayarlanması gibi çeşitli nedenlerden kaynaklanır . Bu nedenle php yöntemini kullanmak daha güvenlidir. Ancak, her ikisini de ekleyecekseniz meta etiketi kazanırdı (yeterince erken olduğunu varsayarsak).

X-UA-CompatibleUyumlu ile ilgili olarak , Microsoft önümüzdeki hafta IE eski sürümleri için destek bırakıyor çünkü yakında bu ilgisiz olacağını umuyoruz !


Ayrıca, denetimi wp_headerskullanmadan filtreyi test ettim is_admin()ve bu nedenle gereksiz olması için admin_headers değiştirmeyecek.

Herhangi bir nedenle yönetici başlıklarını değiştirmeniz gerekiyorsa, bunu böyle yapabileceğinizi biliyorum, ancak her zaman işe yarayıp yaramayacağından emin değilim ...

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

Toscho'nun yönetici kontrol önerisine dayanarak Güncellenmiş Yanıt:

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

2
Yine de kullanmalısınız is_admin() || add_action( … ), çünkü ihtiyacınız yoksa kayıtlı geri aramaların listesini kirletmenize gerek yoktur.
fuxia

İlginç bir nokta toscho ... Yaklaşık on yıldır wordpress siteleri yapıyorum ve veya sembolünü kullanmadan önce bu formatı hiç görmedim. Aslında , bu yaklaşımı eklemek istiyorsanız, koşulları birkaç yıl önce nasıl biçimlendireceğiniz hakkında bir soru sordum .
Bryan Willis

Toscho Cevabınızı önerinizi temel alarak güncelledim. Demek istediğin bu muydu?
Bryan Willis

Evet, doğru görünüyor. :)
fuxia

send_headersHer seferinde kazanacak ve sayfa önbelleğe alındıktan sonra eklenmiş olsa bile yüklenmesini sağlayacaktır” - Sadece, send_headerstestlerimdeki W3 Total Cache veya eklentiler gibi eklentiler tarafından kullanılan sayfa önbelleğini yenmek için işe yaramayacağını unutmayın. WordPress'i sunucu düzeyinde etkili bir şekilde atlar.
Nick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.