J'ai déjà vu wp_headers
et send_headers
utilisé les deux pour la même chose et je me demande comment vous supposez savoir lequel utiliser et quand ...
Sur la send_headers
page du codex, il existe un exemple d'ajout de la X-UA-Compatible: IE=edge,chrome=1
compatibilité descendante pour Internet Explorer, car la balise meta échoue souvent sur les sites intranet si elle est chargée trop tard .
Voici à quoi send_headers
ressemble l' exemple:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
Cependant, vous wp_headers
pouvez également le faire:
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;
}
Mise à jour: je viens de remarquer qu'une conversation à ce sujet a plus ou moins commencé sur une question similaire il y a quelques années ...
En outre, send_headers n'a-t-il à voir qu'avec le frontal? J'ai vu wp_headers faire des vérifications comme ceci:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
et
if (!is_admin())
donc je pense que peut-être send_headers
n'a pas à faire ces vérifications ...
la source
Réponses:
Ok donc je pense que je l'ai compris ...
Ces deux éléments fonctionnent pour la plupart comme vous vous en doutez en envoyant des en-têtes http / php au navigateur.
wp_headers
est en fait un filtre à l'intérieur dessend_headers()
fonctions. Vous pouvez l'utiliser pour modifier les en-têtes avant qu'ils ne soient envoyés au navigateur, à quelques exceptions près.wp_headers
ne pourra rien faire s'il s'agit d'une page en cache statique ...C'est là que le
send_headers
crochet entre en jeu. Après lewp_headers
filtre, lasend_headers()
fonction vérifie siLast-Modified
a été envoyée avec nous indiquerait si la page a été mise en cache ou non et nous permet ensuite de nous y connecter après que la mise en cache, le type de contenu, etc. ont tous été envoyés.Donc, pour mon exemple d'utilisation
X-UA-Compatible
, alors qu'ils fonctionnent tous les deux, je suis enclin à utilisersend_headers
. Pourquoi? D'une part, si vous deviez ajouter les deux,send_headers
cela gagnerait à chaque fois et garantirait qu'il était chargé même s'il était ajouté après la mise en cache de la page.Bien que l'utilisation d'une
<meta>
balise comme de nombreux frameworks populaires fonctionne également pour X-ua, elle ne fonctionnera pas dans de nombreux navigateurs à moins d'être chargée presque immédiatement après la balise head d'ouverture. Cela est dû à diverses raisons, comme si le paramètre "intranet" est défini sur l'ensemble du réseau . Pour cette raison, l'utilisation de la méthode php est plus sûre. Cependant, si vous ajoutiez les deux, la balise META gagnerait (en supposant qu'elle soit incluse suffisamment tôt.En ce qui concerne la
X-UA-Compatible
compatibilité, j'espère que cela ne sera bientôt plus pertinent puisque Microsoft abandonne la prise en charge des anciennes versions d'IE la semaine prochaine!De plus, j'ai testé le
wp_headers
filtre sans utiliser lais_admin()
vérification et il ne modifiera pas les admin_headers de sorte que la vérification n'est pas nécessaire.Si vous aviez besoin de modifier les en-têtes d'administrateur pour une raison quelconque, je sais que vous pouvez le faire comme ça, mais je ne sais pas si cela fonctionnerait tout le temps ...
Réponse mise à jour basée sur la suggestion de Toscho de vérifier pour l'administrateur:
la source
is_admin() || add_action( … )
, car il n'est pas nécessaire de polluer la liste des rappels enregistrés si vous n'en avez pas besoin.send_headers
Gagnerait à chaque fois et assurerait qu'il était chargé , même si elle est ajoutée après que la page a été mise en mémoire cache » - Juste à noter quesend_headers
ne fonctionne pas à la mise en cache de la page beat utilisé par des plugins tels que W3 Total Cache dans mes tests, ou toute mise en cache statique qui contourne efficacement WordPress au niveau du serveur.