【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=~ を出力してこない。
コメント