SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【WordPress】キャッシュ有効期限を記事と記事一覧で切り替える

問題

WordPressの記事にExpireヘッダ、Cache-Controlヘッダを付与したい。

その際、記事ページは長めの有効期限、トップページや記事一覧ページは短めの有効期限にしたい。

答え

Apacheに以下のような設定をしておくと、普段はそちらが適用される。

例)画像などは1週間キャッシュしてよい。HTMLは1日キャッシュしてよい。

        ExpiresActive On
        ExpiresByType text/html "access plus 1 days"
        ExpiresDefault "access plus 1 weeks"

そのうえで、WordPressから必要な時だけヘッダを出力する。

コンテンツの種類に応じてヘッダを出し分けたい場合は、’template_redirect’フックがちょうどよかった。

/**
 * 一覧系(単体記事以外)のキャッシュ時間を短くする
 */
function my_header_cache_control() {
    if (is_home() || is_front_page() || is_archive()) {
        header('Expires: ' . gmdate( 'D, d M Y H:i:s', time() + 600 ) . ' GMT');
        header('Cache-Control: max-age=600, public');
age=0');
    }
}
add_action('template_redirect', 'my_header_cache_control');

「600」と書いている箇所は、希望の時間(秒数)に応じて書き換える。

Cache-Controlだけだと Apacheも Cache-Controlを出力してくるので、Expireとセットで出力する。そうすると、Apacheは Cache-Control: max-age=~ を出力してこない。

関連するメモ

コメント