WP-Funktion / Filter zum Ändern von http-Headern?

17

Gibt es eine spezielle WP-Funktion, Aktion oder einen Filter, die bzw. der beim Hinzufügen / Ändern der HTTP-Header verwendet werden kann?

Im Moment binde ich einfach einen PHP-Header () -Aufruf in den WP-'Init'-Hook ein:

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

Aber ist das der richtige Weg, das zu tun?

mikkelbreum
quelle

Antworten:

9

Die Init-Aktion ist der falsche Ort dafür. Ein besserer Ort wäre template_redirect, sodass Sie nur die Front-End-Ansicht der Site und nicht die Administrationsbereiche beeinflussen.

Otto
quelle
Ein guter Punkt in Bezug auf den Hook, aber abgesehen davon: Ruft man die Funktion 'raw' header () (mit dem richtigen Hook) auf, oder gibt es einen wp-Wrapper, der dafür verwendet werden sollte? Wenn Sie den Header direkt
aufrufen, können
1
header () ist der einzige Weg. Es gibt jedoch einen zweiten Parameter, mit dem Sie vorhandene Header ersetzen können, anstatt sie zu ergänzen. Siehe php.net/manual/en/function.header.php
Otto
14

Hier ist der Code, den ich verwendet habe, basierend auf der ursprünglichen Frage und der Antwort von 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');

Sobald Sie diesen Code zu Ihrer functions.php-Datei hinzugefügt haben, können Sie überprüfen, ob er funktioniert, indem Sie einen Test unter http://web-sniffer.net/ ausführen, um sicherzustellen, dass sich die HTTP-Header tatsächlich geändert haben.

Ban-Geo-Engineering
quelle
11

Ich weiß, es ist schon eine Weile her, aber wenn jemand anderes darüber stolpert, habe ich einen WordPress-Hook speziell zum Ändern von HTTP-Headern gefunden. Der Haken ist wp_headersund es heißt in der WP-Klasse .

Das erste übergebene Argument ist ein Array von Headern mit dem Headernamen als Schlüssel. Das zweite Argument ist ein Verweis auf das WP-Klassenobjekt.

Dominic P
quelle
Es gibt einen weiteren Haken: send_headers. Ich sehe keine "wp_headers" auf der Hook-Liste .
Pixeline
Hmm, das ist interessant. Hier können Sie den Filter wp_headers auschecken .
Dominic P
Ich denke (bin mir aber nicht sicher), dass es "interne" Hooks (wie wp_headers) und "öffentliche" Hooks (wie "send_headers") gibt. "interne" Hooks können in zukünftigen Versionen häufiger geändert werden. "öffentliche" Haken gelten als "stabiler". Aber ich kann mich hier nur irren, ich finde keine Quelle, um dieses Gefühl zu untermauern, das ich bei verschiedenen Recherchen an Hooks hatte.
Pixeline
Das ist sehr gut möglich, aber in diesem Fall haben die beiden Haken einfach unterschiedliche Funktionen. send_headersist eine Aktion, die ausgelöst wird, nachdem die Header gesendet wurden, während wp_headersein Filter auf die Header angewendet wird, bevor sie gesendet werden.
Dominic P
send_headers
na ja
4

send_headersist die bevorzugte Methode wp_headersfür diese Situation, wie im Codex gezeigt .

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

Hier ist meine Erklärung für eine ähnliche Frage.

Bryan Willis
quelle