¿Función / filtro WP para modificar encabezados http?

17

¿Hay una función, acción o filtro WP dedicado para usar al agregar / modificar los encabezados HTTP?

Por ahora solo conecto una llamada de encabezado PHP () en el gancho 'init' de WP de esta manera:

add_action('init', 'add_header_xua');
function add_header_xua(){
    if(!is_admin()){
        header('X-UA-Compatible: IE=edge,chrome=1');    
    }
}

¿Pero es esta la forma correcta de hacer eso?

Mikkelbreum
fuente

Respuestas:

9

La acción init es el lugar equivocado para hacerlo. Un lugar mejor sería template_redirect, para que solo afecte a la vista frontal del sitio y no a las áreas de administración.

Otón
fuente
Un buen punto con respecto al gancho, pero aparte de eso, ¿está llamando a la función de encabezado () 'sin procesar' (usando el gancho correcto) de la manera correcta, o hay un envoltorio wp que debería usarse para esto? Llamar al encabezado directamente solo permite agregar a los encabezados, no modificarlos, como sería posible con un filtro (como cuando se quiere manipular la clase de cuerpo)
mikkelbreum
1
header () es la única forma. Sin embargo, tiene un segundo parámetro que le permitirá reemplazar los encabezados existentes en lugar de agregarlos. Ver php.net/manual/en/function.header.php
Otto
14

Aquí está el código que he usado, basado en la pregunta original y en la respuesta de Dominic P ...

/*
 * Modify HTTP header
 */
function add_header_xua($headers) {

    // var_dump($headers); #=> if you want to see the current headers...  

    if (!is_admin()) {
        $headers['X-UA-Compatible'] = 'IE=edge,chrome=1';    
    }

    return $headers;     
}
add_filter('wp_headers', 'add_header_xua');

Una vez que haya agregado ese código a su archivo functions.php, puede verificar que funcione ejecutando una prueba en http://web-sniffer.net/ para asegurarse de que los encabezados HTTP hayan cambiado.

prohibición de geoingeniería
fuente
11

Sé que ha pasado un tiempo, pero si alguien más tropieza con esto, encontré un enlace de WordPress específicamente para modificar los encabezados HTTP. El gancho es wp_headersy se llama en la clase wp .

El primer argumento pasado es una matriz de encabezados con el nombre del encabezado como clave. El segundo argumento es una referencia al objeto de clase wp.

Dominic P
fuente
Hay otro gancho: send_headers. No veo ningún "wp_headers" en la lista de enlaces .
pixeline
Hmm, eso es interesante. Realice el pago del filtro wp_headers aquí.
Dominic P
Creo (pero no estoy seguro) que hay ganchos "internos" (como wp_headers) y ganchos "públicos" (como "send_headers"). Los ganchos "internos" son más propensos a ser cambiados en futuras versiones. Los ganchos "públicos" se consideran más "estables". Pero puedo estar equivocado aquí, no encuentro ninguna fuente para respaldar este sentimiento que obtuve de varias investigaciones que hice en ganchos.
pixeline
Eso es muy posible, pero en este caso parece que los dos ganchos simplemente realizan diferentes funciones. send_headerses una acción que se activa después de enviar los encabezados, mientras que wp_headerses un filtro en los encabezados que se aplica antes de enviarlos.
Dominic P
así ... si el hecho de que sólo send_headerstiene una página del códice es una indicación de cuál usar ...
drzaus
4

send_headerses el método preferido wp_headerspara esta situación como se demuestra en el códice .

is_admin() || add_action('send_headers', function(){ 
    header('X-UA-Compatible: IE=edge,chrome=1'); 
}, 1);

Aquí está mi explicación de por qué en una pregunta similar.

Bryan Willis
fuente