Widziałem wp_headers
i send_headers
użyłem wcześniej tego samego i zastanawiam się, skąd masz wiedzieć, którego użyć i kiedy ...
Na stronie send_headers
kodeksu znajduje się przykład dodania X-UA-Compatible: IE=edge,chrome=1
wstecznej kompatybilności dla Internet Explorera, ponieważ metatag często zawodzi w witrynach intranetowych, jeśli jest ładowany zbyt późno .
Oto send_headers
jak wygląda przykład:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
Jednak wp_headers
może to również zrobić:
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;
}
Aktualizacja: Właściwie właśnie zauważyłem, że rozmowa na ten temat mniej więcej rozpoczęła się na podobne pytanie kilka lat temu ...
Ponadto, czy send_headers ma związek tylko z interfejsem? Widziałem wp_headers wykonujący takie kontrole:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
i
if (!is_admin())
więc myślę, że może send_headers
nie muszę przeprowadzać tych kontroli ...
źródło
Odpowiedzi:
Ok, więc myślę, że to rozgryzłem ...
Oba działają w przeważającej części, jak można się spodziewać, wysyłając nagłówki http / php do przeglądarki.
wp_headers
jest właściwie filtrem wewnątrzsend_headers()
funkcji. Możesz go użyć do modyfikacji nagłówków, zanim zostaną one wysłane do przeglądarki, z pewnym wyjątkiem.wp_headers
nie będzie w stanie nic zrobić, jeśli chodzi o statyczną stronę w pamięci podręcznej, z którą ...Tutaj zaczyna się
send_headers
hak. Powp_headers
filtrzesend_headers()
funkcja sprawdza, czyLast-Modified
została wysłana, informuje nas, czy strona została zbuforowana, czy nie, a następnie pozwala nam się podłączyć do niej po wysłaniu buforowania, rodzaju zawartości itp.Więc w moim przykładzie
X-UA-Compatible
, podczas gdy oba działają, jestem skłonny do użyciasend_headers
. Dlaczego? Po pierwsze, gdyby dodać oba,send_headers
wygrałby za każdym razem i zapewniłby, że zostanie załadowany, nawet jeśli zostanie dodany po buforowaniu strony.Chociaż użycie
<meta>
tagu, którego używa wiele popularnych frameworków , działałoby również w przypadku kompatybilności z x-ua, nie będzie działać w wielu przeglądarkach, chyba że zostanie załadowane prawie natychmiast po otwierającym tagu head. Jest to spowodowane różnymi przyczynami, np. Jeśli ustawienie „intranet” jest ustawione dla całej sieci . Z tego powodu korzystanie z metody php jest bezpieczniejsze. Jeśli jednak dodasz oba, metatag wygra (zakładając, że zawiera on odpowiednio wcześnie).Jeśli chodzi o
X-UA-Compatible
kompatybilność, mam nadzieję, że wkrótce nie będzie to miało znaczenia, ponieważ Microsoft rezygnuje z obsługi starszych wersji IE w przyszłym tygodniu!Testowałem również
wp_headers
filtr bez użyciais_admin()
czeku i nie zmodyfikuje on nagłówków admin_head, więc sprawdzenie nie będzie konieczne.Jeśli z jakiegoś powodu musiałeś zmodyfikować nagłówki administratora, wiem, że możesz to zrobić w ten sposób, ale nie jestem pewien, czy to działałoby cały czas ...
Zaktualizowana odpowiedź na podstawie sugestii Toscho, aby sprawdzić administratora:
źródło
is_admin() || add_action( … )
, ponieważ nie ma potrzeby zanieczyszczania listy zarejestrowanych wywołań zwrotnych, jeśli nie są potrzebne.send_headers
Wygrywa za każdym razem i zapewnia, że zostanie załadowany, nawet jeśli zostanie dodany po buforowaniu strony” - wystarczy zauważyć, żesend_headers
nie działa, aby pobić buforowanie strony używane przez wtyczki takie jak W3 Total Cache w moich testach lub jakiekolwiek buforowanie statyczne który skutecznie omija WordPress na poziomie serwera.