Fonction / filtre WP pour modifier les en-têtes http?

17

Existe-t-il une fonction, une action ou un filtre WP dédié à utiliser lors de l'ajout / de la modification des en-têtes HTTP?

Pour l'instant je connecte juste un appel PHP header () au hook WP 'init' comme ceci:

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

Mais est-ce la bonne façon de procéder?

mikkelbreum
la source

Réponses:

9

L'action init n'est pas le bon endroit pour le faire. Un meilleur endroit serait à template_redirect, de sorte que vous n'affectiez que la vue frontale du site et non les zones d'administration.

Otto
la source
bon point concernant le hook, mais à part ça, appelle la fonction 'raw' header () (en utilisant le bon hook) de la bonne façon, ou existe-t-il un wrapper wp qui devrait être utilisé pour cela? L'appel direct à l'en-tête permet uniquement d'ajouter aux en-têtes, pas de les modifier, comme cela serait possible avec un filtre (comme lorsque vous voulez manipuler la classe de corps)
mikkelbreum
1
header () est le seul moyen. Cependant, il a un deuxième paramètre qui vous permettra de remplacer les en-têtes existants au lieu de les ajouter. Voir php.net/manual/en/function.header.php
Otto
14

Voici le code que j'ai utilisé, basé sur la question d'origine et sur la réponse 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');

Une fois que vous avez ajouté ce code à votre fichier functions.php, vous pouvez vérifier qu'il fonctionne en exécutant un test sur http://web-sniffer.net/ pour vous assurer que les en-têtes HTTP ont bien changé.

interdiction de la géo-ingénierie
la source
11

Je sais que ça fait un moment, mais si quelqu'un d'autre bute dessus, j'ai trouvé un hook WordPress spécialement pour modifier les en-têtes HTTP. Le crochet est wp_headerset il est appelé dans la classe wp .

Le premier argument passé est un tableau d'en-têtes avec le nom d'en-tête comme clé. Le deuxième argument est une référence à l'objet de classe wp.

Dominic P
la source
Il y a un autre crochet: send_headers. Je ne vois aucun "wp_headers" sur la liste des hooks .
pixeline
Hmm, c'est intéressant. Vous extrayez le filtre wp_headers ici.
Dominic P
Je pense (mais je ne suis pas sûr) qu'il existe des crochets "internes" (tels que wp_headers) et des crochets "publics" (tels que "send_headers"). les crochets "internes" sont plus susceptibles d'être modifiés dans les versions futures. les hameçons "publics" sont jugés plus "stables". Mais je peux juste me tromper ici, je ne trouve aucune source pour sauvegarder ce sentiment que j'ai obtenu de diverses recherches que j'ai faites sur les crochets.
pixeline
C'est très possible, mais dans ce cas, il semble que les deux crochets remplissent simplement des fonctions différentes. send_headersest une action qui se déclenche après l'envoi des en-têtes tandis wp_headersqu'un filtre sur les en-têtes est appliqué avant leur envoi.
Dominic P
eh bien ... si le fait de ne send_headers
disposer
4

send_headersest la méthode préférée par rapport wp_headersà cette situation, comme le montre le codex .

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

Voici mon explication pourquoi sur une question similaire.

Bryan Willis
la source