BLOG

RSSフィードのカスタマイズ

2016-03-11

はじめに

サイトルートが、http:abcd.com の場合、http:abcd.com/feed/で、RSSフィードを取得できます。
こちらで生成されるRSSフィードは、RSS2.0です。

カスタム投稿ごとのRSSを取得したい場合は、
http:abcd.com/カスタム投稿スラッグ/feed/
で取得することができます。
例えば、カスタム投稿ラベルが「ニュース」、スラッグが「news」の場合、
http:abcd.com/news/feed/
になります。

RSSフィードをカスタマイズする

一般的には、RSS2.0のテンプレートをカスタマイズすればよいかと思います。
ググれば詳しく説明してくださっているサイトが見つかります。

remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
function custom_feed_rss2(){
	$template_file = '/feed-rss2.php';
	load_template(get_template_directory() . $template_file);
}
add_action('do_feed_rss2', 'custom_feed_rss2', 10);

上記をfunctions.phpに記述し、wp-includeフォルダからfeed-rss2.phpを、
テンプレートフォルダにコピーすれば、それがフィードのテンプレートファイルになります。
テンプレートの存在の有無の加減もありますので、fuctions.phpに記述する方が良いでしょう。

RSSフィードにカスタム投稿を含める

WordPressのデフォルトのRSSフィードは、「投稿(post)」のみフィードされます。
カスタム投稿などを使用して、サイトをカスタマイズしている場合、
RSSフィードの生成に一手間掛ける必要があります。
「ニュース(スラッグ:news)」, 「リクルート(スラッグ:recruit)」というカスタム投稿をRSSフィードに含めたい場合、

function mysite_feed_request($vars) {
 if ( isset( $vars['feed'] ) && !isset( $vars['post_type'] ) ) {
 $vars['post_type'] = array( 'post', 'news', 'recruit' );
 }
 return $vars;
}
add_filter( 'request', 'mysite_feed_request' );

と、fuctions.phpに記述することで、RSSフィードにカスタム投稿を含めることができます。
/news/feed/にアクセスした場合は、ニュースのみフィードされたRSSを取得することができます。

RSSフィードテンプレートのカスタマイズ

さて、これまでの作業でやっとテンプレートのカスタマイズの準備ができました。
では、何をカスタマイズしたいのか?というところですが、
WordPressでリクルートを管理し、更新されたらニュースに表示する。
という案件がありました。
feed01
このように、募集職種をタイトル管理し、リクルートページでは一覧を表示。
ニュースページには、「○○○○の採用を開始しました。」と表示するようにしていました。
同じことをRSSに反映したいと思います。

前項で用意したfeed-rss2.phpファイルの、

while (have_posts()) : the_post();?>

while (have_posts()) : the_post();
$type = $post->post_type;?>

にすると、カスタム投稿のスラッグを取得することができます。
後は、if分岐でタイトル表示を振り分けてあげれば良いわけです。
上記では、$typeにカスタム投稿スラッグが入りました。

テンプレートファイル内に、

<title><?php the_title_rss() ?></title>

という場所が、タイトル設定箇所のようですので、

<?php if($type == 'recruit'): ?>
<title><?php the_title(); ?>を採用を開始しました。</title>
<?php else: ?>
<title><?php the_title_rss() ?></title>
<?php endif; ?>

としてあげれば、リクルートの時は「<strong>○○○○の採用を開始しました。</strong>」に。 それ以外は、普通にタイトルが表示されることになります。 これ以外にも、普通のテンプレートのように柔軟にカスタマイズすることができます。 ただ、タイトルタグなどが一部違いますので、リファレンスを参考にしておいてください。

RSSフィードのキャッシュを切る

WordPressのFeedのキャッシュは、デフォルトで1時間に設定されています。 上記でフィードのテンプレートを変更しても、すぐに反映されません。 以下のコードをfunctions.phpに記述すれば、すぐに確認することができます。 確認後は削除し、キャッシュを持たせてください。

define('MAGPIE_CACHE_ON', 0);

ちなみに、

define('MAGPIE_CACHE_AGE', 100 );

とすれば、100秒のキャッシュタイムになります。

私は、最近はRSSリーダーでザッピングすることも減りましたが、
Web制作案件では、グループ会社のニュースをRSSでピックアップし、
グループのポータルサイトで表示する場合などに使用します。