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でリクルートを管理し、更新されたらニュースに表示する。
という案件がありました。
このように、募集職種をタイトル管理し、リクルートページでは一覧を表示。
ニュースページには、「○○○○の採用を開始しました。」と表示するようにしていました。
同じことを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でピックアップし、
グループのポータルサイトで表示する場合などに使用します。