web-dev-qa-db-ja.com

HTTPヘッダーをプラグインから特定のカテゴリの投稿のみに変更する方法

追加の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;
}

しかしそれも失敗します。だから私の質問は:

  • HTTPヘッダーの変更を特定のカテゴリの投稿にのみ制限する方法を教えてください。
3
Jim Duggan

なぜうまくいかないのか

send_headersフックは、キャッシング、コンテンツなどのためのHTTPヘッダが送信された後、メインクエリが正しく開始される前に起動されます。そのため、このアクションフックでin_category()関数を使用すると機能しません。 wp_headersフィルタフックについても同様です。

機能させるには:

  1. template_redirect actionフック(あるいはwpアクションフック)を使うことができます。このフックは、メインデータベースのクエリ関連オブジェクトが正しく初期化された後で、出力が生成される前に起動されます。そのため、このフックは追加のHTTPヘッダを設定したり、他のURLにリダイレクトしたりするのに適しています。

  2. また、そのカテゴリの投稿にのみ適用する場合は、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からの投稿にのみ適用されます。

4
Fayaz