Pocket

アイキャッチ画像がFeedlyに表示されない問題

RSSリーダーにFeedlyを使っているのですが、このサイトを登録しておこうと思って登録すると非常に残念なことに……(下図参照)

Feedly Feed一覧

アイキャッチ画像は無視されて、投稿の本文にある画像を表示している模様。まぁ、RSSフィード内にアイキャッチ画像のパスは存在しないのでそりゃあ表示できないよなぁと思いまして。じゃあ投稿の中にアイキャッチ画像を入れるというところに行き着くのですが、RSSフィードのコンテンツ出力部分にフックポイントがないかと調査を開始。

RSSフィードの投稿本文の出力箇所確認

WordPressのサイトでは、設置したドメイン(もしくはURL)の後ろに「/feed/」とつけるとRSSフィードを確認できます。フィードの形式はRSS/RSS2/Atom/RDFと出力できるようになっています。
デフォルトではRSS2が出力されるロジックになっていました。

default_feedのフィルターフックが準備してあるので、デフォルトは変更できるみたいだな。(変えることあるかな…)
ということで、wp-includes/feed-rss2.phpの該当箇所を確認。

get_option('rss_use_excerpt'))は管理画面の「設定」→「表示設定」にある「RSS/Atom フィードでの各投稿の表示」による分岐。抜粋のみを表示の場合は<content:encoded>が出力されないということ。(それにしても可読性悪いな…)

RSSフィード設定画面

コード内のthe_excerpt_rss()関数で抜粋、get_the_content_feed()関数で投稿の本文を表示・取得している模様。それぞれフックポイントを探る。

the_excerpt_rss()

関数の中身を見てみると、get_the_excerpt()関数で抜粋の値を取得してechoしているだけみたい。the_excerpt_rssというフィルターが準備されているので、$outputにアイキャッチ画像をつけてあげれば良さそう。

get_the_content_feed()

こちらの関数も中身を見てみると、the_excerpt_rss()関数と似たような感じでget_the_content()関数で投稿の本文の値を取得して戻している。こちらもthe_content_feedというフィルターが準備されているので、$contentにアイキャッチ画像をつけてあげればこちらも良さそう。

functions.phpに実装コードを書いてみる

要は、the_excerpt_rss()関数もget_the_content()関数で抜粋・本文を返すフィルターが準備されているので、アイキャッチ画像をその前につけてあげれば良い。それならば関数は1つで良さそうなので以下のようなコードを書きました。

RSSフィードを確認して、<description><content:encoded>にアイキャッチ画像のimg要素が追加されていることが確認できました。

Feedly一覧表示OK

一覧をクリックして出て来る本文にもアイキャッチ画像が挿入されていていい感じ!\(^o^)/

Feedlyコンテンツアイキャッチ挿入

Feedlyで確認

ここで問題が…。Feedlyに過去に掲載された記事の情報が更新されない…。キャッシュをクリアする方法はないものか。