Ich habe gesehen wp_headers
und send_headers
beide schon einmal für dasselbe verwendet und ich frage mich, wie Sie wissen sollen, welches Sie wann verwenden sollen ...
Auf der send_headers
Codex-Seite finden Sie ein Beispiel für das Hinzufügen der X-UA-Compatible: IE=edge,chrome=1
Abwärtskompatibilität für Internet Explorer, da das Meta-Tag auf Intranetsites häufig fehlschlägt, wenn es zu spät geladen wird .
send_headers
So sieht das Beispiel aus:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
Allerdings wp_headers
kann 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: Mir ist gerade erst aufgefallen, dass vor ein paar Jahren ein Gespräch darüber mehr oder weniger mit einer ähnlichen Frage begann ...
Hat send_headers auch nur mit dem Frontend zu tun? Ich habe gesehen, wie wp_headers folgende Überprü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
ich diese Kontrollen vielleicht nicht machen muss ...
quelle
Antworten:
Ok, ich denke ich habe es herausgefunden ...
Beide funktionieren größtenteils wie erwartet, indem Sie http / php-Header an den Browser senden.
wp_headers
ist eigentlich ein Filter innerhalb dersend_headers()
Funktionen. Sie können diesen verwenden, um die Header zu ändern, bevor sie mit einigen Ausnahmen an den Browser gesendet werden.wp_headers
wird nichts tun können, wenn es sich um eine statische zwischengespeicherte Seite handelt, mit der es zu tun hat ...Hier kommt der
send_headers
Haken ins Spiel. Nach demwp_headers
Filtersend_headers()
prüft die Funktion, obLast-Modified
mit gesendet wurde, ob die Seite zwischengespeichert wurde oder nicht, und lässt uns dann einbinden, nachdem Caching, Inhaltstyp usw. gesendet wurden.Für mein Beispiel mit
X-UA-Compatible
, während beide funktionieren, neige ich dazu, zu verwendensend_headers
. Warum? Zum einen würde, wenn Sie beide hinzufügensend_headers
würden, jedes Mal gewinnen und sicherstellen, dass es geladen wird, selbst wenn es hinzugefügt wird, nachdem die Seite zwischengespeichert wurde.Während die Verwendung eines
<meta>
Tags, wie es in vielen gängigen Frameworks verwendet wird , auch für x-ua-kompatibel 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 eingestellt ist . Aus diesem Grund ist die Verwendung der PHP-Methode sicherer. Wenn Sie jedoch beide hinzufügen würden, würde das Meta-Tag gewinnen (vorausgesetzt, es wurde früh genug aufgenommen.In Bezug auf die
X-UA-Compatible
Kompatibilität hoffe ich, dass dies bald irrelevant sein wird, da Microsoft nächste Woche die Unterstützung für ältere Versionen von IE einstellt !Außerdem habe ich den
wp_headers
Filter ohne Verwendung deris_admin()
Prüfung getestet und die admin_headers werden nicht geändert, sodass eine Prüfung nicht erforderlich ist.Wenn Sie aus irgendeinem Grund die Admin-Header ä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 ...
Aktualisierte Antwort basierend auf Toschos Vorschlag, nach Admin zu suchen:
quelle
is_admin() || add_action( … )
, da die Liste der registrierten Rückrufe nicht verschmutzt werden muss, wenn Sie sie nicht benötigen.send_headers
Würde jedes Mal gewinnen und sicherstellen, dass es geladen wird, auch wenn es nach demsend_headers
Zwischenspeichern der Seite hinzugefügt wird" - Nur um zu beachten, dass es nicht funktioniert, das von Plugins wie W3 Total Cache in meinen Tests verwendete Seiten-Caching oder statisches Caching zu übertreffen das umgeht WordPress effektiv auf Serverebene.