Lo he visto wp_headers
y lo he send_headers
usado antes para lo mismo y me pregunto cómo se supone que debes saber cuál usar y cuándo ...
En la send_headers
página del códice hay un ejemplo de agregar la X-UA-Compatible: IE=edge,chrome=1
compatibilidad con versiones anteriores de Internet Explorer ya que la metaetiqueta a menudo falla en los sitios de la intranet si se carga demasiado tarde .
Así es send_headers
como se ve el ejemplo:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
Sin embargo wp_headers
, también puede hacer esto:
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;
}
Actualización: De hecho, me di cuenta de que una conversación sobre esto comenzó más o menos con una pregunta similar hace un par de años ...
Además, ¿send_headers tiene que ver solo con el front-end? He visto a wp_headers hacer verificaciones como esta:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
y
if (!is_admin())
así que estoy pensando que tal vez send_headers
no tenga que hacer esos controles ...
fuente
Respuestas:
Ok, entonces creo que lo descubrí ...
Ambos funcionan en su mayor parte como es de esperar al enviar encabezados http / php al navegador.
wp_headers
en realidad es un filtro dentro de lassend_headers()
funciones. Puede usar esto para modificar los encabezados antes de enviarlos al navegador con alguna excepción.wp_headers
no podrá hacer nada si se trata de una página estática en caché ...Aquí es donde
send_headers
entra en juego el gancho. Después delwp_headers
filtro, lasend_headers()
función comprueba siLast-Modified
se ha enviado con nos dirá si la página se ha almacenado en caché o no y luego nos permite conectarlo después de que se haya enviado el almacenamiento en caché, el tipo de contenido, etc.Entonces, para mi ejemplo usando
X-UA-Compatible
, mientras ambos funcionan, me inclino a usarsend_headers
. ¿Por qué? Por un lado, si tuviera que agregar ambos,send_headers
ganaría cada vez y se aseguraría de que se cargara incluso si se agrega después de que la página se haya almacenado en caché.Si bien el uso de una
<meta>
etiqueta como el uso de muchos frameworks populares también funcionaría para x-ua-compatible, no funcionará en muchos navegadores a menos que se cargue casi inmediatamente después de la etiqueta principal de apertura. Esto se debe a varias razones, como si la configuración de "intranet" está establecida en toda la red . Por esta razón, usar el método php es más seguro. Sin embargo, si tuviera que agregar ambos, la metaetiqueta ganaría (suponiendo que se incluyera lo suficientemente temprano).Con respecto a la
X-UA-Compatible
compatibilidad, ¡espero que esto sea irrelevante pronto ya que Microsoft dejará de admitir versiones anteriores de IE la próxima semana!Además, probé el
wp_headers
filtro sin usar lais_admin()
verificación y no modificará admin_headers, por lo que esa verificación es innecesaria.Si necesita modificar los encabezados de administración por alguna razón, sé que puede hacerlo así, pero no estoy seguro de si funcionaría todo el tiempo ...
Respuesta actualizada basada en la sugerencia de Toscho de buscar administrador:
fuente
is_admin() || add_action( … )
, ya que no es necesario contaminar la lista de devoluciones de llamada registradas si no lo necesita.send_headers
Ganaría cada vez y se aseguraría de que se cargara incluso si se agrega después de que la página se almacenó en caché" - Solo para tener en cuenta quesend_headers
no funciona para vencer el almacenamiento en caché de páginas utilizado por complementos como W3 Total Cache en mis pruebas, o cualquier almacenamiento en caché estático que efectivamente pasa por alto WordPress a nivel de servidor.