WordPressのRSSフィードを拡張して、画像を埋め込む為に

以前、IFTTTを使ったTwitterとの連携を紹介しました。

ここから、WordPressの標準フィードだとアイキャッチ画像が表示されないとの相談をうけ、フィード側に必要な対応もまとめておきます。

mediaタグがデフォルトには含まれないのでカスタムフィードを使う必要があるのです。

フィードテンプレートをコピーしてくる

/wp-includes/feed-rss2.php

このファイルをテーマフォルダにフィードテンプレートをコピーしてきます。

先のテンプレートを読み込ませる

おなじみの、functions.php にこの記述を追加です。

remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
function custom_feed_rss2(){
    $template_file = '/feed-rss2.php';
    load_template(get_template_directory() . $template_file);
}
add_action('do_feed_rss2', 'custom_feed_rss2', 10);

rssフィードの読み込み時にフックさせる処理です。これでコピーしてきた方のテンプレートを読み込みにいきます。

mediaタグを追記

冒頭のnamespaceにmedia定義を追加し、

<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	<?php
	/**
	 * Fires at the end of the RSS root to add namespaces.
	 *
	 * @since 2.0.0
	 */
	do_action( 'rss2_ns' );
	?>
>
カテゴリの書き出しや、guidの書き出しの間辺りに、メディアタグを追加します。
<dc:creator><![CDATA[<?php the_author(); ?>]]></dc:creator>
<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
<?php the_category_rss('rss2'); ?>

<?php
$image_id = get_post_thumbnail_id();
$image_url = wp_get_attachment_image_src($image_id, 'large');
if ($image_url) :
    ?>
    <media:content medium="image" url="<?php echo $image_url[0]; ?>" width="<?php echo $image_url[1]; ?>" height="<?php echo $image_url[2]; ?>"/>
<?php endif; ?>

<guid isPermaLink="false"><?php the_guid(); ?></guid>

<?php if (get_option('rss_use_excerpt')) : ?>

サイズは large にしてますが、お好みで。

フィードの構文チェック

https://validator.w3.org/feed/

ここでチェックできちゃいます。

こんな感じです。