ワードプレスのfeedでは、デフォルトでは、各記事のtitle要素に記事タイトルしか含まれません。しかしそれだと情報不足になる場合もあるので、feedのテンプレートをカスタマイズする方法を調べてまとめてみました。
なお、feedに含まれる投稿を絞り込むカスタマイズについてはこちらをご覧ください。
feedのテンプレートはどこにある?
カスタマイズするには、まず、feedのテンプレートがどこにあるか把握しないといけません。
feedのテンプレートはデフォルトでは、wp-includesフォルダーにあります。名前が「feed-」で始まるファイルがfeedのテンプレートです。
feed-atom.php
atom形式のfeedテンプレート
feed-atom-comments.php
atom形式のcomment-feedテンプレート
feed-rdf.php
rdf形式のfeedテンプレート
feed-rss.php
rss0.92形式のfeedテンプレート
feed-rss2.php
rss2形式のfeedテンプレート
feed-rss2-comments.php
rss2形式のcomment-feedテンプレート
テーマファイルにfeed-~.phpをコピペ
カスタマイズするのに、wp-includes内のファイルを直接編集するのはあまりよくないので、上記の6種類のファイルのうち、カスタマイズしたいものだけをコピーして、テーマフォルダーに貼り付けます。
ウェブシュフの場合だと、TwentyTwelveをカスタマイズ中なので、TwentyTwelveフォルダー内に貼り付けます。
wp-includesフォルダーの名前が「feed-」で始まるファイルのうち、カスタマイズしたいものを、現在使用しているテーマのフォルダーにコピペします。
function.phpに書き込み
feed-~.phpをテーマファイル内にコピペしただけでは、wp-includesフォルダー内のファイルがfeedのテンプレートとして選択されたままです。
そこで、、テーマファイル内のfeed-~.phpがfeedのテンプレートになるように、function.phpで設定を行います。
ウェブシュフの場合は、feed-atom.php、feed-rdf.php、feed-rss.php、feed-rss2.phpの4つをカスタマイズしたいので、以下の内容をfunction.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_stylesheet_directory() . $template_file )
? get_stylesheet_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_stylesheet_directory() . $template_file )
? get_stylesheet_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_stylesheet_directory() . $template_file )
? get_stylesheet_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_stylesheet_directory() . $template_file )
? get_stylesheet_directory()
: ABSPATH . WPINC
) . $template_file;
load_template( $template_file );
}
add_action('do_feed_atom', 'custom_feed_atom', 10, 1);
これで各feed-~.phpをカスタマイズする準備がやっと出来ました。
各feed-~.phpをカスタマイズする
これで、テンプレートタグ等を使って、カスタマイズを自由自在に行えます。
ウェブシュフは、feed-atom.php、feed-rdf.php、feed-rss.php、feed-rss2.phpの4つで
<?php the_title_rss();?>
を
<?php
$cates = get_the_category(); $cat = $cates[0];
$ancestors=get_ancestors($cat->cat_ID, 'category' );
$kosu=count($ancestors);
for ($i = 1; $i <= $kosu; $i++)
{
$catname[$i-1]=get_cat_name($ancestors[$kosu-$i]);
}
$catname[$kosu]=$cat->name;
$title=$post->post_title.'|'.implode( ' ', $catname ).'|'.get_bloginfo('name');
echo $title;
?>
に置き換えて、feedの記事タイトルの末尾にカテゴリを付けてみました。
Special Thanks
[img-link url=”http://dogmap.jp/2009/04/30/switching-feed-template/” title=”各種フィード用テンプレートの変更 | dogmap.jp”]