WordPressでRSSフィードに出力される内容をカスタマイズする方法

WordPressでRSSフィードに出力される内容をカスタマイズする方法

WordPressには、サイトの更新情報を発信する方法として「RSS」配信機能が搭載されています。

Memo

RSSは、ニュースやブログなど各種のウェブサイトで、更新情報を配信するためのXML形式のデータフォーマットで、WordPressにも標準搭載されています。

RSS配信しているサイト(以下のような画像が掲載されているサイト)なら、RSSリーダーと呼ばれるツールを使用することで、更新情報や新着情報を自動的に取得することができます。

WordPressでRSSフィードに出力される内容をカスタマイズする方法

RSSフィードには、画像やテキストを出力することができますが、WordPressの設定画面からは、RSSフィードに表示する内容として「全⽂を表⽰」するか「要約」を表示するかしか設定できません。

WordPressでRSSフィードに出力される内容をカスタマイズする方法

そこでここでは、WordPressのRSSフィードに指定した抜粋内容を表示させたり、アイキャッチ画像を出力させるカスタマイズ方法を紹介します。

ニュースサイトから見出しベースで効率よく情報収集するならRSSリーダー
ここでは、朝の通勤通学時間にニュースアプリよりも効率よく情報収集する方法としてスマートフォン向けのRSSリーダーを紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェア(プラグイン)バージョン
WordPress5.7.2

moreタグまでの内容を出⼒する

WordPressでは、Webページの抜粋を指定するためのタグとして「more」タグがあり、このタグを活用して、RSSフィードにmoreタグまでの内容を出力させることができます。

実装方法は、子テーマの「functions.php」に以下を追記します。

function my_content_feeds($content) {
  global $post, $more;
  $more = false;
  $content = apply_filters('the_content', get_the_content(''));
  $content = str_replace(']]>', ']]>', $content);
  return $content;
}
add_filter('the_excerpt_rss', 'my_content_feeds');
add_filter('the_content_feed', 'my_content_feeds');

moreタグまでの内容に加えて、元記事へのリンクも出力させたいときは、以下を追記します。

function my_content_feeds($content) {
  global $post, $more;
  $more = false;
  $content = apply_filters('the_content', get_the_content(''));
  $content = str_replace(']]>', ']]>', $content);
  $content = $content . '<div><a href="' . get_permalink($post->ID) . '">「 ' . get_the_title($post->ID) . ' 」の続きを読む</a></div>';
  return $content;
}
add_filter('the_excerpt_rss', 'my_content_feeds');
add_filter('the_content_feed', 'my_content_feeds');
Memo

上の処理を「functions.php」に追記する場合、記事内にmoreタグがないと全文出力されてしまうのでご注意ください。

アイキャッチ画像を出力する

RSSフィードにアイキャッチ画像を出力させたいときは、子テーマの「functions.php」に以下を追記します。

function rss_thumbnail($content) {
  global $post;
  if (has_post_thumbnail($post->ID)) {
    $content = '<p>' . get_the_post_thumbnail($post->ID,'medium') .'</p>' . $content;
  }
  return $content;
}
add_filter( 'the_excerpt_rss', 'rss_thumbnail');
add_filter( 'the_content_feed', 'rss_thumbnail');

RSSフィードへの反映を遅延させる

デフォルトでは、投稿が公開されるとRSSフィードの内容も同時に更新されますが、コンテンツの盗用が気になるなら、投稿を公開してからRSSフィードに表示されるまでの時間に遅延を設定することで、コンテンツの盗用を減らす効果があります。

たとえば、投稿が公開されてからRSSフィードが更新されるまでに30分の遅延を設定したい場合は、子テーマの「functions.php」に以下を追記します。

//RSSフィードでの投稿表示を30分遅らせる
function delay_feed_content($where) {
  global $wpdb;
  if ( is_feed() ) {
    $now = gmdate('Y-m-d H:i:s');
    $wait = '30';
    $device = 'MINUTE';
    $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
  }
  return $where;
}
add_filter('posts_where', 'delay_feed_content');

投稿者情報を変更する

WordPressが生成するRSSフィードには、投稿者の情報(dc:creator)が記載されていますが、投稿者名がWordPressの管理画面へのログイン名であることも多いため、フィードに表示される投稿者名は変更しておくとよいでしょう。

投稿者名を変更する方法としては、WordPressの管理画面でユーザーにニックネームを設定する方法もありますが、別の名前を設定することもできます。

たとえば、投稿者情報(dc:creator)欄をサイト名に変更したい場合は、子テーマの「functions.php」に以下を追記します。

//RSSフィードのdc:creator名をサイト名に変更する
function delete_feed_author($author) {
  if(is_feed()){
    $author = get_bloginfo( 'name' ) ;
  }
  return $author;
}
add_filter( 'the_author', 'delete_feed_author');

あとがき

RSSフィードに出力される内容を必要な情報だけに絞り込めば、より分かりやすく安全に更新情報を配信できるでしょう。