Funkcja / filtr WP do modyfikowania nagłówków HTTP?

17

Czy istnieje specjalna funkcja WP, akcja lub filtr do użycia podczas dodawania / modyfikowania nagłówków HTTP?

Na razie podpinam wywołanie PHP header () do zaczepu WP 'init' w następujący sposób:

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

Ale czy to właściwy sposób, aby to zrobić?

mikkelbreum
źródło

Odpowiedzi:

9

Akcja inicjująca jest niewłaściwym miejscem do tego. Lepszym miejscem byłoby szablon_redirect, abyś wpływał tylko na widok frontonu witryny, a nie na obszary administracyjne.

Otto
źródło
dobra uwaga na temat hooka, ale poza tym, czy wywoływanie funkcji 'raw' header () (przy użyciu prawego hooka) jest prawidłowe, czy może jest to wrapper wp, którego należy użyć? Bezpośrednie wywołanie nagłówka pozwala tylko dodawać do nagłówków, nie modyfikować ich, tak jak byłoby to możliwe przy pomocy filtra (na przykład, gdy chcesz manipulować klasą body)
mikkelbreum
1
header () jest jedynym sposobem. Ma jednak drugi parametr, który pozwoli Ci zastąpić istniejące nagłówki zamiast je dodawać. Zobacz php.net/manual/en/function.header.php
Otto,
14

Oto kod, którego użyłem, w oparciu o oryginalne pytanie i odpowiedź Dominica 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');

Po dodaniu tego kodu do pliku functions.php możesz sprawdzić, czy działa, uruchamiając test na stronie http://web-sniffer.net/, aby upewnić się, że nagłówki HTTP rzeczywiście się zmieniły.

zakaz geoinżynierii
źródło
11

Wiem, że minęło trochę czasu, ale jeśli ktokolwiek natknie się na to, znalazłem hak WordPress specjalnie do modyfikowania nagłówków HTTP. Hak jest wp_headersi jest wywoływany w klasie wp .

Pierwszy przekazany argument to tablica nagłówków z nazwą nagłówka jako kluczem. Drugi argument jest odwołaniem do obiektu klasy wp.

Dominic P.
źródło
Jest jeszcze inny haczyk: send_headers. Nie widzę żadnych „wp_headers” na liście hooków .
pixeline
Hmm, to interesujące. Ci kasy na filtr wp_headers tutaj.
Dominic P
Myślę (ale nie jestem pewien), że istnieją „wewnętrzne” haki (takie jak wp_headers) i „publiczne” haki (takie jak „send_headers”). haki „wewnętrzne” są bardziej podatne na zmiany w przyszłych wydaniach. „publiczne” haki są uważane za bardziej „stabilne”. Ale mogę się tutaj mylić, nie znajduję żadnego źródła na poparcie tego uczucia, które otrzymałem z różnych badań przeprowadzonych na hakach.
pixeline
To bardzo możliwe, ale w tym przypadku wygląda na to, że dwa haki po prostu pełnią różne funkcje. send_headersto akcja, która jest uruchamiana po wysłaniu nagłówków, podczas gdy wp_headersfiltr na nagłówkach jest stosowany przed ich wysłaniem.
Dominic P
no cóż ... jeśli fakt, że send_headersma tylko stronę kodeksu, jest jakąkolwiek wskazówką, której użyć ...
drzaus
4

send_headersjest preferowaną metodą wp_headersdla tej sytuacji, jak pokazano w kodeksie .

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

Oto moje wyjaśnienie, dlaczego mam podobne pytanie.

Bryan Willis
źródło