私はwp_headers
とsend_headers
が同じもののために以前に使われたのを見ました、そして、あなたがどれをいつ使うべきかを知っているべきだと思っています...
send_headers
codexページ には、メタタグが ロードが遅すぎるとイントラネットサイトで失敗します _のため、Internet Explorerの下位互換性のためにX-UA-Compatible: IE=Edge,chrome=1
を追加する例があります。
これが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;
}
更新: 実際には、2年前に これに関する会話 が似たような質問から始まったことに気づいたばかりです...
また、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タグを開いた直後にロードしない限り動作しません。これは、 "intranet"設定がネットワーク全体に設定されている場合 などのさまざまな理由により発生します。このため、phpメソッドを使用する方が安全です。ただし、両方を追加する場合は、メタタグが優先されます(それが十分早く含まれていたと仮定します)。
X-UA-Compatible
互換性に関しては、来週のIEの古いバージョンでは Microsoftはサポートを終了しています なので、これがすぐに無関係になることを望んでいます!
また、is_admin()
チェックを使用せずにwp_headers
フィルターをテストしましたが、admin_headersは変更されないため、チェックは不要です。
何らかの理由でadminヘッダーを変更する必要がある場合、このようにできることはわかっていますが、常に機能するかどうかはわかりません...
function admin_add_my_header() {
header('X-UA-Compatible: IE=Edge,chrome=1');
}
add_action( 'admin_init', 'admin_add_my_header', 1 );
管理者を確認するためのToschoの提案に基づいて回答を更新しました:
is_admin() || add_action('send_headers', function(){
header('X-UA-Compatible: IE=Edge,chrome=1');
}, 1);