Função / filtro WP para modificar cabeçalhos http?

17

Existe uma função, ação ou filtro WP dedicado para usar ao adicionar / modificar os cabeçalhos HTTP?

Por enquanto, eu apenas conecto uma chamada de cabeçalho PHP () no gancho 'init' do WP assim:

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

Mas esta é a maneira correta de fazer isso?

mikkelbreum
fonte

Respostas:

9

A ação init é o lugar errado para fazê-lo. Um local melhor seria em template_redirect, para que você afete apenas a visualização front-end do site e não as áreas administrativas.

Otto
fonte
Um ponto positivo em relação ao gancho, mas, além disso, está chamando a função header 'bruta' () (usando o gancho direito) da maneira correta, ou existe um wrapper wp que deve ser usado para isso? Chamando cabeçalho diretamente só permite para adicionar aos cabeçalhos, não modificá-los, como seria possível com um filtro (como quando você deseja manipular a classe corpo)
mikkelbreum
11
header () é a única maneira. No entanto, ele possui um segundo parâmetro que permite substituir os cabeçalhos existentes em vez de adicioná-los. Veja php.net/manual/en/function.header.php
Otto
14

Aqui está o código que eu usei, com base na pergunta original e na resposta 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');

Depois de adicionar esse código ao seu arquivo functions.php, você pode verificar se funciona executando um teste em http://web-sniffer.net/ para garantir que os cabeçalhos HTTP tenham realmente mudado.

proibição de geoengenharia
fonte
11

Sei que já faz um tempo, mas se alguém tropeçar nisso, encontrei um gancho para WordPress especificamente para modificar cabeçalhos HTTP. O gancho é wp_headerse é chamado na classe wp .

O primeiro argumento passado é uma matriz de cabeçalhos com o nome do cabeçalho como chave. O segundo argumento é uma referência ao objeto de classe wp.

Dominic P
fonte
Há um outro gancho: send_headers. Não vejo nenhum "wp_headers" na lista de ganchos .
Pixeline
Hum, isso é interessante. Você faz o checkout do filtro wp_headers aqui.
Dominic P
Eu acho (mas não tenho certeza) que existem ganchos "internos" (como wp_headers) e ganchos "públicos" (como "send_headers"). ganchos "internos" são mais propensos a serem alterados em versões futuras. ganchos "públicos" são considerados mais "estáveis". Mas posso estar errado aqui, não encontro nenhuma fonte para apoiar esse sentimento que recebi de várias pesquisas que fiz em ganchos.
Pixeline
Isso é muito possível, mas, neste caso, parece que os dois ganchos simplesmente executam funções diferentes. send_headersé uma ação que é acionada após o envio dos cabeçalhos enquanto wp_headersé um filtro nos cabeçalhos aplicados antes do envio.
Dominic P
bem ... se o fato de que só send_headerstem uma página do códice é qualquer indicação de qual usar ...
drzaus
4

send_headersé o método preferido wp_headerspara esta situação, conforme demonstrado no codex .

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

Aqui está a minha explicação do porquê de uma pergunta semelhante.

Bryan Willis
fonte