Я видел, wp_headers
и send_headers
оба использовали раньше для одного и того же, и мне интересно, как вы думаете, какой из них использовать и когда ...
На send_headers
странице кодекса есть пример добавления X-UA-Compatible: IE=edge,chrome=1
обратной совместимости для Internet Explorer, так как метатег часто дает сбой на сайтах интрасети, если загружается слишком поздно .
Вот как send_headers
выглядит пример:
add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
Однако wp_headers
также может сделать это:
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;
}
Обновление: я только что заметил, что разговор об этом более или менее начался по похожему вопросу пару лет назад ...
Кроме того, send_headers имеет отношение только к внешнему интерфейсу? Я видел, как wp_headers делает такие проверки:
if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )
а также
if (!is_admin())
так что я думаю, что, возможно send_headers
, не нужно делать эти проверки ...
источник
Ответы:
Хорошо, так что я думаю, что я понял это ...
Обе они работают по большей части, как и следовало ожидать, отправляя заголовки http / php в браузер.
wp_headers
на самом деле это фильтр внутриsend_headers()
функций. Вы можете использовать его для изменения заголовков, прежде чем они будут отправлены в браузер, за некоторым исключением.wp_headers
не сможет ничего сделать, если это статическая кэшированная страница имела дело с ...Это где
send_headers
крюк вступает в игру. Послеwp_headers
фильтраsend_headers()
функция, проверяющаяLast-Modified
, была ли отправлена с, сообщит нам, была ли страница кэширована или нет, и затем позволяет нам подключиться к ней после того, как все кэширование, тип контента и т. Д. Были отправлены.Так что для моего примера использования
X-UA-Compatible
, пока они оба работают, я склонен использоватьsend_headers
. Почему? Например, если вы добавите оба из них,send_headers
каждый раз будет выигрывать и гарантировать, что он был загружен, даже если он был добавлен после кэширования страницы.Хотя использование
<meta>
тега, как и многие популярные фреймворки , также будет работать для x-ua-совместимого, оно не будет работать во многих браузерах, если не будет загружено почти сразу после открывающего тега head. Это вызвано различными причинами, например, если настройка «интрасеть» установлена в сети . По этой причине использование метода php безопаснее. Однако, если бы вы добавили оба, метатег победил бы (при условии, что он включался достаточно рано).Что касается
X-UA-Compatible
совместимости, я надеюсь, что это скоро будет неактуально, так как Microsoft на следующей неделе прекращает поддержку более старых версий IE!Кроме того, я протестировал
wp_headers
фильтр без использованияis_admin()
проверки, и он не изменит admin_headers, так что проверка не нужна.Если вам по какой-то причине нужно было изменить заголовки администратора, я знаю, что вы можете сделать это следующим образом, но я не уверен, будет ли это работать постоянно ...
Обновленный ответ основан на предложении Toscho проверить администратора:
источник
is_admin() || add_action( … )
, потому что нет необходимости загрязнять список зарегистрированных обратных вызовов, если вам это не нужно.send_headers
Будет выигрывать каждый раз и будет гарантировать, что он был загружен, даже если он был добавлен после того, как страница была кэширована» - просто заметьте, чтоsend_headers
это не работает, чтобы превзойти кэширование страниц, используемое плагинами, такими как W3 Total Cache, в моих тестах, или любое статическое кэширование это эффективно обходит WordPress на уровне сервера.