WordPressのRSS2.0にenclosureでサムネイルを追加する

WordPressのRSS2.0にenclosureでサムネイルを追加する

RSSに規定の要素を追加して欲しいということで、カスタマイズをした時のメモです。少々苦労したもので・・
WordPressのRSS(RSS2.0)にサムネイル画像を追加する、という記事は結構あるのですが、多くは「contents」として吐き出すタイプで、enclosure対応ものはあまり見つかりませんでした。

enclosureの書式は下記のような形です。url属性で添付データのURL、lengthはデータのサイズ、typeはデータのMIMEタイプを指定しています。この3つは必須項目です。

<enclosure url="https://aaa.com/normal.jpg" length="1221632" type="image/jpeg" />

今回こちらで行った手段は・・

  1. 「wp-includes」内のfeed-rss2.phpを自作のテーマの中にコピー
  2. feed-template-customizeというプラグインを入れて、テーマ内のテンプレートを読み込ませる
    古いプラグインですが、問題なく動作しました。ただし、プラグインを使わずにfunctions.php内に記述することで同じことは実現可能です。
  3. RSSテンプレートを書き換え

問題は、この書換の内容です。functions.phpやRSSテンプレートに追記をする方法をいくつか試みましたが、どれもエラーになってしまい、最終的には下記テンプレートをまるごと上書きしたところ、エラーを起こさず動作しました。

https://gist.github.com/mathetos/774e38c9ae1799e25cff

ただし、上記のままではlengthが出力されません。そこで下記の記事を参考に、少し書き換えました。
https://johnmorrisonline.com/how-to-add-featured-images-to-your-wordpress-rss-feed/

lengthを追記しただけです。filesizeで取得できます。

$attachment_id = get_post_thumbnail_id( get_the_ID());
$length = filesize(get_attached_file($attachment_id));
<enclosure url="<?php echo esc_url( $postimage ); ?>" type="image/jpeg" length="<?php echo $length; ?>" /> 

こちらで完了です。