[WordPress] Quick Cacheがカスタマイズしたfeed(RSS)をキャッシュしない
- 21 8月, 2013
WordPress3.x系でQuick Cacheを使っていました。feedは速報性を維持したいのでキャッシュ対象外にしていたのですが、とある事情でキャッシュさせることになりました。
しかしキャッシュ対象外リストから削除しても、キャッシュされません。feedレスポンスの末尾を見てもキャッシュの刻印がなく、cacheディレクトリにもファイルが作成されませんでした。(もちろんログインしていないですよw)
原因は下記のように独自のfeed用テンプレートファイルを使っていたことでした。
<br />remove_filter('do_feed_rss2', 'do_feed_rss2', 10);<br />function do_feed_rss2_original(){<br /><%%KEEPWHITESPACE%%> $template = '/feed-rss2-original.php';<br /><%%KEEPWHITESPACE%%> load_template(get_template_directory().$template);<br />}<br />add_action('do_feed_rss2', 'do_feed_rss2_original', 10);<br />/wp/wp-includes/にあるfeed-rss2.phpを直接修正してしまうと、WordPressをバージョンアップする際、元に戻ってしまうので、よく紹介されるやり方で変更していました。ですが、このやり方だとQuick Cacheがキャッシュしてくれませんでした。。。残念orz
/feed/へのリクエストで、あるパラメータが指定されたときは独自フォーマットに変える必要があったので、feed-rss2.phpの修正は必須。しかしコアファイルへの修正は認められない。なんとも板ばさみな状況になってしまいました。
苦手なフィルターやフックを使えば何とかなると思うので、色々試したいと思います。
出来たらそれをアップします。
2013/9/10更新
上記オリジナルfeedテンプレートの中で、
オリジナルへのアクセスをあらわすパラメータを受け取った後は、
デフォルトのアクションを削除することで何とか実現できました。
<br />if("もしオリジナルfeedの場合"){<br /><%%KEEPWHITESPACE%%> remove_action('do_feed_rss2', 'do_feed_rss2', 10);<br /><%%KEEPWHITESPACE%%> /*以下、オリジナル処理*/<br />}<br />これでオリジナル処理を実行した後、デフォルトの処理が呼ばれずに済みました。
ちょっとセンスが無い感じがしましたが、取り急ぎ。