Ich habe wp_headers
und send_headers
gesehen, die beide zuvor für die gleiche Sache verwendet wurden, und ich frage mich, wie Sie vermutlich wissen sollen, welche zu verwenden ist und wann ...
Auf der Codex-Seite send_headers
gibt es ein Beispiel für das Hinzufügen des X-UA-Compatible: IE=Edge,chrome=1
aus Gründen der Abwärtskompatibilität mit Internet Explorer, da das Metatag häufig auf Intranetsites fehlschlägt, wenn es zu spät geladen wird .
So sieht das send_headers
-Beispiel aus:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=Edge,chrome=1' );
}
Allerdings kann wp_headers
dies auch tun:
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;
}
Update: Eigentlich ist mir gerade aufgefallen, dass ein Gespräch darüber vor ein paar Jahren mehr oder weniger mit einer ähnlichen Frage begonnen hat ...
Hat send_headers nur mit dem Frontend zu tun? Ich habe gesehen, wie wp_headers solche Prüfungen durchgeführt hat:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
und
if (!is_admin())
also denke ich, dass send_headers
diese Überprüfungen vielleicht nicht durchführen muss ...
Ok also denke ich, dass ich es herausgefunden habe ...
Beide funktionieren größtenteils wie erwartet, indem Sie http/php-Header an den Browser senden. wp_headers
ist eigentlich ein Filter innerhalb der send_headers()
-Funktionen. Sie können dies verwenden, um die Header zu ändern, bevor sie mit einigen Ausnahmen an den Browser gesendet werden. wp_headers
kann nichts tun, wenn es sich um eine statisch zwischengespeicherte Seite handelt ...
Hier kommt der Hook send_headers
ins Spiel. Nach dem Filter wp_headers
überprüft die Funktion send_headers()
, ob Last-Modified
gesendet wurde, ob die Seite zwischengespeichert wurde oder nicht, und lässt uns nach dem Senden von Caching, Inhaltstyp usw. einbinden.
Für mein Beispiel mit X-UA-Compatible
bin ich also geneigt, send_headers
zu verwenden, obwohl beide funktionieren. Warum? Zum einen, wenn Sie beide hinzufügen, gewinnt send_headers
jedes Mal und stellt sicher, dass er geladen wird, auch wenn er nach dem Zwischenspeichern der Seite hinzugefügt wird.
Während die Verwendung eines <meta>
-Tags wie viele gängige Frameworks verwenden auch für x-ua-kompatible Systeme funktioniert, funktioniert es in vielen Browsern nur, wenn es fast unmittelbar nach dem öffnenden head-Tag geladen wird. Dies wird aus verschiedenen Gründen verursacht, z. B. wenn die Einstellung "Intranet" netzwerkweit festgelegt ist . Aus diesem Grund ist die Verwendung der PHP-Methode sicherer. Wenn Sie jedoch beide hinzufügen, gewinnt das Meta-Tag (vorausgesetzt, es wurde früh genug eingefügt).
In Bezug auf X-UA-Compatible
-kompatibel hoffe ich, dass dies bald irrelevant sein wird, da Microsoft den Support einstellt nächste Woche für ältere Versionen von IE!
Außerdem habe ich den wp_headers
-Filter ohne die is_admin()
-Prüfung getestet und die admin_headers werden nicht geändert, sodass keine Prüfung erforderlich ist.
Wenn Sie die Admin-Header aus irgendeinem Grund ändern mussten, wissen Sie, dass Sie dies so tun können, aber ich bin mir nicht sicher, ob es die ganze Zeit funktionieren würde ...
function admin_add_my_header() {
header('X-UA-Compatible: IE=Edge,chrome=1');
}
add_action( 'admin_init', 'admin_add_my_header', 1 );
Aktualisierte Antwort basierend auf Toschos Vorschlag, nach Admin zu suchen:
is_admin() || add_action('send_headers', function(){
header('X-UA-Compatible: IE=Edge,chrome=1');
}, 1);