追加のHTTPヘッダを挿入するためのプラグインがあります。次のコードでうまく動作します。
add_action( 'send_headers', 'jim_stop' );
function jim_stop() {
header( 'Cache-Control: no-store, no-cache, must-revalidate, max-age=0' );
header( 'Pragma: no-cache' );
header( 'Expires: Thu, 01 Dec 1994 16:00:00 GMT' );
}
上記のHTTPヘッダをすべての投稿に設定します。ただし、ヘッダーは特定のカテゴリのページにのみ挿入します。たとえば、カテゴリslugがx
、idが75
であるとします。
カテゴリx
の投稿に固有のHTTPヘッダーを設定するために、次のように条件付きでin_category( 'x' )
を使用しました。
add_action( 'send_headers', 'jim_stop' );
function jim_stop() {
if ( in_category( 'x' ) ) {
// category specific HTTP headers
}
}
しかし、それはうまくいきませんでした。
私はまたこのようなカテゴリーをチェックしようとしました:
$cat = get_query_var( 'cat' );
if ( $cat == '75' ) {
// category specific HTTP headers
}
そしてまたこれのように:
global $post;
if ( in_category ( 'x', $post->ID ) ) {
// category specific HTTP headers
}
しかし、それらも失敗します。
カテゴリチェックはsend_headers
アクションフックではうまくいきませんでしたので、次のようにwp_headers
フィルタフックでやってみました。
add_filter( 'wp_headers', 'add_header_xua' );
function add_header_xua( $headers ) {
if ( in_category( 'x' ) ) {
// category specific HTTP header changes
}
return $headers;
}
しかしそれも失敗します。だから私の質問は:
send_headers
フックは、キャッシング、コンテンツなどのためのHTTP
ヘッダが送信された後、メインクエリが正しく開始される前に起動されます。そのため、このアクションフックでin_category()
関数を使用すると機能しません。 wp_headers
フィルタフックについても同様です。
template_redirect
actionフック(あるいはwp
アクションフック)を使うことができます。このフックは、メインデータベースのクエリ関連オブジェクトが正しく初期化された後で、出力が生成される前に起動されます。そのため、このフックは追加のHTTPヘッダを設定したり、他のURLにリダイレクトしたりするのに適しています。
また、そのカテゴリの投稿にのみ適用する場合は、is_single()
を確認する必要があります。それ以外の場合は、カテゴリアーカイブページにも適用されます。
そのため、作業コードは次のようになります。
add_action( 'template_redirect', 'jim_stop' );
function jim_stop() {
if( is_single() && in_category( 'x' ) ) {
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: Thu, 01 Dec 1990 16:00:00 GMT');
}
}
これでカテゴリチェックが機能し、それらの追加のHTTPヘッダはカテゴリx
からの投稿にのみ適用されます。