Funzione / filtro WP per la modifica delle intestazioni http?


17

Esiste una funzione, un'azione o un filtro WP dedicati da utilizzare quando si aggiungono / modificano le intestazioni HTTP?

Per ora ho solo agganciato una chiamata di intestazione PHP () all'hook 'init' del WP in questo modo:

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

Ma è questo il modo corretto di farlo?

Risposte:


9

L'azione init è il posto sbagliato per farlo. Un posto migliore sarebbe in template_redirect, in modo da influire solo sulla vista del front-end del sito e non sulle aree di amministrazione.


Un buon punto per quanto riguarda l'hook, ma a parte questo, è chiamare la funzione header () 'raw' (usando l'hook destro) nel modo corretto, o c'è un wrapper wp che dovrebbe essere usato per questo? La chiamata diretta dell'intestazione consente solo di aggiungere alle intestazioni, non modificarle, come sarebbe possibile con un filtro (come quando si desidera manipolare la classe corporea)
mikkelbreum

1
header () è l'unico modo. Tuttavia, ha un secondo parametro che ti permetterà di sostituire le intestazioni esistenti invece di aggiungerle. Vedi php.net/manual/en/function.header.php
Otto

14

Ecco il codice che ho usato, basato sulla domanda originale e sulla risposta di 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 volta aggiunto quel codice al tuo file Functions.php, puoi verificare che funzioni eseguendo un test su http://web-sniffer.net/ per assicurarti che le intestazioni HTTP siano effettivamente cambiate.


11

So che è passato un po 'di tempo, ma se qualcun altro si imbatte in questo, ho trovato un hook di WordPress appositamente per modificare le intestazioni HTTP. L'hook è wp_headersed è chiamato nella classe wp .

Il primo argomento passato è un array di intestazioni con il nome dell'intestazione come chiave. Il secondo argomento è un riferimento all'oggetto classe wp.


C'è un altro gancio: send_headers. Non vedo alcun "wp_headers" nell'elenco hook .
pixeline

Hmm, è interessante. Si verifica il filtro wp_headers qui.
Dominic P

Penso (ma non sono sicuro) che ci siano hook "interni" (come wp_headers) e hook "pubblici" (come "send_headers"). gli hook "interni" sono più inclini a essere modificati nelle versioni future. i ganci "pubblici" sono considerati più "stabili". Ma potrei sbagliarmi qui, non trovo alcuna fonte per sostenere questa sensazione che ho avuto da varie ricerche che ho fatto sugli ami.
pixeline

Questo è molto possibile, ma in questo caso sembra che i due ganci svolgano semplicemente funzioni diverse. send_headersè un'azione che si attiva dopo l'invio delle intestazioni mentre wp_headersè un filtro sulle intestazioni che viene applicato prima che vengano inviate.
Dominic P,

bene ... se il fatto che send_headersabbia solo una pagina di codice è un'indicazione su quale usare ...
drzaus,

4

send_headersè il metodo preferito rispetto wp_headersa questa situazione, come dimostrato nel codice .

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

Ecco la mia spiegazione del perché su una domanda simile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.