Eu já vi wp_headers
e send_headers
usei antes para a mesma coisa e estou me perguntando como você deve saber qual usar e quando ...
Na send_headers
página do codex, há um exemplo de adição X-UA-Compatible: IE=edge,chrome=1
de compatibilidade com versões anteriores do Internet Explorer, pois a metatag frequentemente falha nos sites da intranet, se carregada tarde demais .
É assim que o send_headers
exemplo se parece:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
No entanto, wp_headers
também pode fazer isso:
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;
}
Atualização: Na verdade, acabei de perceber que uma conversa sobre isso começou mais ou menos sobre uma pergunta semelhante há alguns anos ...
Além disso, send_headers tem a ver apenas com o front end? Eu já vi wp_headers fazer verificações como esta:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
e
if (!is_admin())
então estou pensando que talvez send_headers
não precise fazer essas verificações ...
fonte
Respostas:
Ok, então eu acho que descobri ...
Ambos funcionam na maior parte do esperado, enviando cabeçalhos http / php para o navegador.
wp_headers
é na verdade um filtro dentro dassend_headers()
funções. Você pode usá-lo para modificar os cabeçalhos antes de serem enviados ao navegador, com alguma exceção.wp_headers
não poderá fazer nada se estiver lidando com uma página em cache estática ...É aqui que o
send_headers
gancho entra em jogo. Após owp_headers
filtro, asend_headers()
função que verifica seLast-Modified
foi enviada nos informaria se a página estava em cache ou não e, em seguida, permite que ela seja conectada após o envio do cache, do tipo de conteúdo, etc.Portanto, no meu exemplo
X-UA-Compatible
, enquanto ambos trabalham, estou inclinado a usarsend_headers
. Por quê? Por um lado, se você adicionasse os dois,send_headers
venceria todas as vezes e garantiria que ele fosse carregado mesmo se adicionado após o cache da página.Embora o uso de uma
<meta>
tag como muitas estruturas populares também funcione para x-ua-compatible, ele não funcionará em muitos navegadores, a menos que seja carregado quase imediatamente após a tag de abertura. Isso é causado por vários motivos, como se a configuração "intranet" fosse definida em toda a rede . Por esse motivo, o uso do método php é mais seguro. No entanto, se você adicionar os dois, a meta tag vencerá (assumindo que foi incluída com antecedência suficiente).Em relação aos
X-UA-Compatible
compatíveis, espero que isso seja irrelevante em breve, pois a Microsoft está deixando de lado o suporte para versões mais antigas do IE na próxima semana!Além disso, testei o
wp_headers
filtro sem usar ais_admin()
verificação e ele não modificará os admin_headers, para que a verificação seja desnecessária.Se você precisou modificar os cabeçalhos do administrador por algum motivo, sei que pode fazê-lo assim, mas não tenho certeza se funcionaria o tempo todo ...
Resposta atualizada com base na sugestão de Toscho de verificar o administrador:
fonte
is_admin() || add_action( … )
, porque não há necessidade de poluir a lista de retornos de chamada registrados, se você não precisar.send_headers
Venceria todas as vezes e garantiria que ele fosse carregado mesmo se adicionado depois que a página fosse armazenada em cache” - Apenas para observar quesend_headers
não funciona para superar o cache de páginas usado por plugins como W3 Total Cache nos meus testes ou qualquer cache estático que efetivamente ignora o WordPress no nível do servidor.