WordPressは、アイキャッチ画像の設定の先駆けとも言えるのにも関わらずアイキャッチ画像をRSSフィードへの反映はされないのがデフォルト仕様になっています。そこで、RSSフィードにてもアイキャッチ画像を反映されるようにするコードは以下になります。以前にもRSSフィードへの反映方法はいろいろ試行錯誤しましたが、結果的に以下のコードにて落ち着いています。決して以前のRSSフィードにアイキャッチ画像を反映させる方法が使えないということではありませんのでご了承ください。同じようなコードを使用している方や紹介されている方もいらっしゃいます。どちらが良いのということではなくこのような方法もあるという意味合いです。
WordPressにてRSSフィードにアイキャッチ画像をしっかりと反映させる方法のコードです。
// RSSフィードにアイキャッチ画像と100文字の抜粋を追加する
function add_image_and_excerpt_to_rss($content) {
global $post;
// フィードでない場合は変更しない
if (!is_feed()) {
return $content;
}
// 投稿にアイキャッチ画像があるか確認
if (has_post_thumbnail($post->ID)) {
$thumbnail_id = get_post_thumbnail_id($post->ID);
$thumbnail = wp_get_attachment_image_src($thumbnail_id, 'medium');
if ($thumbnail && isset($thumbnail[0])) {
$image_url = esc_url($thumbnail[0]);
$image_html = '<p><img src="' . $image_url . '" alt="' . esc_attr(get_the_title($post->ID)) . '" /></p>';
$content = $image_html . $content;
}
}
// 投稿の抜粋を取得し、100文字に制限
$excerpt = get_the_excerpt();
$excerpt = mb_strimwidth($excerpt, 0, 100, '...', 'UTF-8');
$excerpt_html = '<p>' . esc_html($excerpt) . '</p>';
// 抜粋をコンテンツの前に追加
$content = $excerpt_html . $content;
return $content;
}
add_filter('the_excerpt_rss', 'add_image_and_excerpt_to_rss');
add_filter('the_content_feed', 'add_image_and_excerpt_to_rss');
これはアイキャッチ画像のみではなく抜粋記事として100文字を取得するようにしています。
また、以下のサイトを参照しますとRSSフィードの更新(反映)時間がWordPressの場合はデフォルトで12時間のようなので、その更新(反映)時間を変更すると良いのかと思われます。
ただ、リアルタイムに近くなる分サーバーによってはページの表示時間がかなり遅くなってしまう場合があるようです。
なので、いくつかのサイトを拝見させていただき2時間での更新時間(反映時間)が一番良さそうでした。以下の上記RSSフィードにアイキャッチ画像を反映させ抜粋記事100文字のコードに追加して以下のコードを追記するとよいのかもしれません。
// RSS フィードのキャッシュ更新間隔を 2 時間に設定
function custom_feed_cache_lifetime($seconds) {
return 7200; // 2 時間 = 7200 秒
}
add_filter('wp_feed_cache_transient_lifetime', 'custom_feed_cache_lifetime');
RSSキャッシュをなくしリアルタイムに反映させる方法は以下になります。(参考程度に)
/** フィードのキャッシュオフ**/
function ha_turn_off_feed_caching($feed){
$feed-> enable_cache(false);
}
add_action('wp_feed_options','ha_turn_off_feed_caching');
これで上記した更新時間のキャッシュによる遅延がなくなるようです。
結論としては、上記大元のRSSフィードにアイキャッチ画像と抜粋記事100文字のコードと2時間の更新間隔にしています。
まとめますと以下のコードのようになります。
// RSSフィードにアイキャッチ画像と100文字の抜粋を追加する
function add_image_and_excerpt_to_rss($content) {
global $post;
// フィードでない場合は変更しない
if (!is_feed()) {
return $content;
}
// 投稿にアイキャッチ画像があるか確認
if (has_post_thumbnail($post->ID)) {
$thumbnail_id = get_post_thumbnail_id($post->ID);
$thumbnail = wp_get_attachment_image_src($thumbnail_id, 'medium');
if ($thumbnail && isset($thumbnail[0])) {
$image_url = esc_url($thumbnail[0]);
$image_html = '<p><img src="' . $image_url . '" alt="' . esc_attr(get_the_title($post->ID)) . '" /></p>';
$content = $image_html . $content;
}
}
// 投稿の抜粋を取得し、100文字に制限
$excerpt = get_the_excerpt();
$excerpt = mb_strimwidth($excerpt, 0, 100, '...', 'UTF-8');
$excerpt_html = '<p>' . esc_html($excerpt) . '</p>';
// 抜粋をコンテンツの前に追加
$content = $excerpt_html . $content;
return $content;
}
add_filter('the_excerpt_rss', 'add_image_and_excerpt_to_rss');
add_filter('the_content_feed', 'add_image_and_excerpt_to_rss');
// RSS フィードのキャッシュ更新間隔を 2 時間に設定
function custom_feed_cache_lifetime($seconds) {
return 7200; // 2 時間 = 7200 秒
}
add_filter('wp_feed_cache_transient_lifetime', 'custom_feed_cache_lifetime');
comment