wp_headers vs send_headers。それぞれをいつ使用するのですか?


10

私はこれまでに同じものに使用したことがありますがwp_headerssend_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それらのチェックをする必要はないと考えています...


1
一般的に言えば、1つはアクションで、もう1つはフィルターです。アクションは、イベントが発生したときに何かを行うためのものであり、フィルターは、使用前に何かを変更するためのものです。
ミロ2016年

回答:


9

わかりました、私はそれを理解したと思います...

これらはどちらも、ブラウザーにhttp / phpヘッダーを送信することで期待どおりに機能します。wp_headersこれは実際にはsend_headers()関数内のフィルターです。これを使用して、いくつかの例外を除いて、ブラウザーに送信される前にヘッダーを変更できます。wp_headers静的にキャッシュされたページが処理されている場合は何もできません...

これがsend_headersフックの出番です。wp_headersフィルターの後、send_headers()関数Last-Modifiedはが送信されたかどうかをチェックして、ページがキャッシュされているかどうかを通知し、キャッシュ、コンテンツタイプなどがすべて送信された後にページにフックできるようにします。

したがってX-UA-Compatible、を使用する私の例では、どちらも機能しますが、を使用する傾向がありますsend_headersどうして?1つは、これらの両方を追加する場合、send_headers毎回勝ち、ページがキャッシュされた後に追加された場合でもロードされることを保証します。

使用している間<meta>のようなタグを使用すると、多くの一般的なフレームワークのほぼ冒頭のheadタグの直後にロードされない限り、多くのブラウザでは、X-UA-互換、それはないでしょう仕事のための仕事にもなります。これは、「イントラネット」設定がネットワーク全体に設定されている場合など、さまざまな理由で発生します。このため、phpメソッドを使用する方が安全です。ただし、両方を追加した場合、メタタグが優先されます(十分に早い段階で含まれていたと仮定します)。

X-UA-Compatible互換性に関しては、Microsoftが来週、古いバージョンのIEのサポート打ち切るので、これはすぐに問題にならないことを期待しています!


また、チェックwp_headersを使用せずにフィルターをテストしましたがis_admin()、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);

2
is_admin() || add_action( … )登録済みのコールバックのリストが不要な場合は、汚染する必要がないため、引き続きを使用する必要があります。
fuxia

興味深いポイントtoscho ...私は約10年間ワードプレスサイトを作成してきましたが、or記号を使用する前にそのフォーマットを見たことはありません。私は実際に質問尋ねたあなたはその方法を追加するように感じる場合はどのように適切にフォーマット条件数年ほど前に。
ブライアンウィリス

Toscho私はあなたの提案に基づいて私の答えを更新しました。それはあなたが意味したことですか?
ブライアンウィリス

はい、そうです。:)
fuxia

send_headers毎回勝ち、ページがキャッシュされた後に追加された場合でもロードされることを保証します」— send_headersテストでW3 Total Cacheなどのプラグインによって使用されるページキャッシングや静的キャッシングに勝つために機能しないことに注意してくださいサーバーレベルでWordPressを効果的にバイパスします。
Nick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.