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" />
今回こちらで行った手段は・・
- 「wp-includes」内のfeed-rss2.phpを自作のテーマの中にコピー
- feed-template-customizeというプラグインを入れて、テーマ内のテンプレートを読み込ませる
古いプラグインですが、問題なく動作しました。ただし、プラグインを使わずにfunctions.php内に記述することで同じことは実現可能です。 - 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; ?>" />
こちらで完了です。