WordPress RSS フィードにアイキャッチ画像を表示する方法

Last update 
/ Posted by Takumi Hirashima

WordPress で RSS フィードにアイキャッチ画像を表示する方法を紹介します。
例えば RSS リーダーの Web サービス feedly で、サイトのフィードを登録する時に表示されるサムネイルをカスタマイズしたい時に便利な方法です。

RSS/Atom フィードでの各投稿の表示を変更

WordPress のフィードの設定は、最初に投稿の全文を表示されるように設定されています。本文に画像があれば、最初に表示される画像がサムネイルの候補に選択されるので、まずはこの設定を変更します。
管理画面の設定から表示設定を選択、表示設定の「RSS/Atom フィードでの各投稿の表示」の項目を「抜粋のみを表示」に選択して保存します。

RSS フィードにアイキャッチ画像を表示

設定が反映されると 抜粋に入力されたテキストが表示されるはずなので、フィード URL にアクセスして内容を確認してみましょう。

http://sample.com/?feed=rss
http://sample.com/?feed=rss2
http://sample.com/?feed=rdf
http://sample.com/?feed=atom

カスタムパーマリンクを使用している場合は、次の URL でアクセスします。

http://sample.com/feed/
http://sample.com/feed/rss/
http://sample.com/feed/rss2/
http://sample.com/feed/rdf/
http://sample.com/feed/atom/

抜粋の反映が確認できたら、今度は抜粋の前にアイキャッチ画像が表示されるようします。
次のコードを functions.php に追加します。

/* 【RSS】RSS フィードにアイキャッチ画像を表示 */
function rss_post_thumbnail($content) {
  global $post;
  if(has_post_thumbnail($post->ID)) {
    $thumbnail_id = get_post_thumbnail_id($post->ID); // アイキャッチ画像の ID を取得
    $thumbnail = wp_get_attachment_image_src( $thumbnail_id, 'medium' ); // medium サイズの画像情報を取得
    $thumbnail_url = $thumbnail[0]; // URL を取得
    $content = '<p><img src="'.$thumbnail_url.'" alt="'.get_the_title().'" /></p><p>'.$content.'</p>';
  } else {
    $content = '<p><img src="'.get_template_directory_uri().'/img/nowprinting.png" alt="'.get_the_title().'" /></p><p>'.$content.'</p>';
  }
  return $content;
}
add_filter('the_excerpt_rss','rss_post_thumbnail');
add_filter('the_content_feed','rss_post_thumbnail');

画像がなければテーマファイル内の代替画像を表示します、代替画像は各自でご用意ください。代替画像が必要なければ else 部分の表示を削除してください。

RSS フィードが更新されない時の対処法

例えば feedly などでフィードが正しく反映されているかを確認したい場合に、フィードが更新されず古いままの時があります。それは WordPress がフィードのキャッシュを保存しているからなのですが、キャッシュの保存期間はデフォルトで12時間に設定されています。12時間も待てない人は自分でキャッシュの保存期間を変更する必要があります。変更するためには WordPress のコアファイル /wp-includes/feed.php から次の行を変更します。

$feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) );

例えば、保存期間を30分にする場合は次のように変更します。

$feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 1800, $url ) );

変更内容は WordPress のアップデートで上書きされる可能性があるので、修正が確認できたら元に戻しておくのがよいかもしれません。

まとめ

WordPress で RSS フィードにアイキャッチ画像を表示する方法を紹介しました。

スポンサーリンク