各種フィード用テンプレートの変更

なんでwpにfeedのテンプレートがないんだぜ?だるまんさんが、Twitter 上で「なんでwpにfeedのテンプレートがないんだぜ?」とつぶやいていました。
確かに WordPress では、テーマ変更で見栄えがガラッと変わるのに feed は色気の無い画一的なものばかり。
feedburner 導入で表示されるフィードのようにちょっと一工夫したカッコイイフィードを表示すると自己満足度が急速に上がりそうです。
他にも P2 テーマ用にエントリ本文+コメントを含んだフィードを配信するとか、私的にはあまり嬉しくないですがフィードに AdSense 等の広告を含んだりとか、色々と応用範囲が広がりますね。
そんなわけで、各種フィード用テンプレートをデフォルト以外のものに変更する方法を調べてみました。
結論から言うと、アクションフックの remove, add で、簡単にできます。

WordPress では、各種フィードを要求された場合 do_feed_rss, do_feed_rss2, というアクション(フィルタ)をフックして、それぞれ do_feed_rss(), do_feed_rss2(), という関数内でテンプレートをロードしています。
なので、これらのアクションフックを remove 後、新たにテーマフォルダ内のテンプレートをロードするようなアクションフックを add すれば、お好きなテンプレートをロードできるようになるのです。

実際のコードは、こんな感じ。

<?php
// アクションフック リムーブ
remove_filter('do_feed_rdf', 'do_feed_rdf', 10);
remove_filter('do_feed_rss', 'do_feed_rss', 10);
remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
remove_filter('do_feed_atom', 'do_feed_atom', 10);

// アクションフック 追加
function custom_feed_rdf() {
	$template_file = '/feed-rdf.php';
	$template_file = ( file_exists( get_template_directory() . $template_file )
		? get_template_directory()
		: ABSPATH . WPINC
		) . $template_file;
	load_template( $template_file );
}
add_action('do_feed_rdf', 'custom_feed_rdf', 10, 1);

function custom_feed_rss() {
	$template_file = '/feed-rss.php';
	$template_file = ( file_exists( get_template_directory() . $template_file )
		? get_template_directory()
		: ABSPATH . WPINC
		) . $template_file;
	load_template( $template_file );
}
add_action('do_feed_rss', 'custom_feed_rss', 10, 1);

function custom_feed_rss2( $for_comments ) {
	$template_file = '/feed-rss2' . ( $for_comments ? '-comments' : '' ) . '.php';
	$template_file = ( file_exists( get_template_directory() . $template_file )
		? get_template_directory()
		: ABSPATH . WPINC
		) . $template_file;
	load_template( $template_file );
}
add_action('do_feed_rss2', 'custom_feed_rss2', 10, 1);

function custom_feed_atom( $for_comments ) {
	$template_file = '/feed-atom' . ( $for_comments ? '-comments' : '' ) . '.php';
	$template_file = ( file_exists( get_template_directory() . $template_file )
		? get_template_directory()
		: ABSPATH . WPINC
		) . $template_file;
	load_template( $template_file );
}
add_action('do_feed_atom', 'custom_feed_atom', 10, 1);
?>

テーマの functions.php とかに追記しておけば、それぞれ以下のファイルがテーマフォルダ内にあると、feed 作成用のテンプレートとして使用できます。

  • feed-atom.php atom フィード用テンプレート
  • feed-atom-comments.php atom コメントフィード用テンプレート
  • feed-rdf.php rdf フィード用テンプレート
  • feed-rss.php rss フィード用テンプレート
  • feed-rss2.php rss 2.0 フィード用テンプレート
  • feed-rss2-comments.php rss 2.0 コメントフィード用テンプレート

これらのテンプレートの元ファイルとしては、wp-include フォルダ内の同名のファイルをテーマフォルダ内にコピーして使用すれば良いでしょう。
カスタマイズは、通常のテーマテンプレートファイルと同様にして行えます。

これにカッコイイサンプルテンプレートを追加すれば、WordPress 用プラグインの出来上がりですが、残念ながらカッコイイデザインのセンスが無い orz

各種フィード用テンプレートの変更」への13件のフィードバック

  1. ピンバック: WordPressのフィードに関する覚え書き | Gatespace's Blog

  2. ピンバック: Wordpressでfeedのテンプレートをカスタマイズする手順まとめ |ウェブシュフ

  3. ピンバック: WordPressで登録ユーザー限定コンテンツがあるときのフィードの本文 | Gatespace's Blog

  4. ピンバック: WordPressのフィードに関する覚え書き | Gatespace's Blog

  5. ピンバック: WordPressで登録ユーザー限定コンテンツがあるときのフィードの本文 | Gatespace's Blog

  6. ピンバック: WordPressのRSSFeedに、アイキャッチ画像を追加する方法 | InfinityScope

  7. ピンバック: WordPressのFeedテンプレートをカスタマイズする | masalog

  8. ピンバック: feedテンプレートを作る - Dazzling World2

  9. ピンバック: フィードのテンプレートってないの?【WordPress】 | ウェブなとき。

  10. ピンバック: Daily Digest for 20091027 – lifestream@add

  11. だるまん

    あの時は大変助かりました^^
    結局自分でやろうとしていた事はthe_contentsフックで本文を隠せばいいだけだったので、feedのテンプレートが必須な無いようではなかったと後で気づきましたが、今後暇があればfeedを読んで告知を出す簡単なAIRアプリでもと思ってたので、その際読みやすいfeedを作るために活用できそうだなと思ってたりします。
    ありがとうございました!

    返信
    1. をかもと 投稿作成者

      だるまんさん、どもです。

      お役に立てたようで良かったです。
      ここに載せたコードは最初に提示したものと若干変わってます。
      # 具体的には、テーマフォルダに無かったらデフォルトのテンプレートを使用するようになっています。

      そのうち、私なりのフィルタフックの探し方とかもエントリするつもりです。

      返信

コメントを残す

メールアドレスが公開されることはありません。