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.