他ブログのRSSの最新情報をサムネイル付きで表示(WordPress)

今回自分の運営しているwordpressサイトのRSSを取得して最新情報(サムネイル付)一覧を表示したので備忘録としてまとめます。

サムネイル付きというのが案外難しくて、どうもSSL化した無料SSL証明書「Let’s Encrypt」が原因らしいという記事も出回っていましたが、今回表示するサイトも取得したいサイトもLet’s EncryptのSSLを使用していましたが表示出来ました。

やったこと

  1. RSSを取得したいサイトのrssfeedにサムネイルurlを吐き出すようにさせた
  2. 表示したいサイトに取得するタグを打った
  3. 完了

RSSを取得したいサイトのrssfeedにサムネイルurlを吐き出すようにさせた

次のタグをfunction.phpの最後に追加しました。

/* 【RSS】RSS フィードにアイキャッチ画像を表示 */
function rss_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$thumbnail_id = get_post_thumbnail_id($post->ID); // アイキャッチ画像の ID を取得
$thumbnail = wp_get_attachment_image_src( $thumbnail_id, ‘medium’ ); // medium サイズの画像情報を取得
$thumbnail_url = $thumbnail[0]; // URL を取得
$content = ‘<p><img src=”‘.$thumbnail_url.'” alt=”‘.get_the_title().'” /></p><p>’.$content.'</p>’;
} else {
$content = ‘<p><img src=”‘.get_template_directory_uri().’/common/images/noimg.jpg” alt=”‘.get_the_title().'” /></p><p>’.$content.'</p>’;
}
return $content;
}
add_filter(‘the_excerpt_rss’,’rss_post_thumbnail’);
add_filter(‘the_content_feed’,’rss_post_thumbnail’);

表示したいサイトに取得するタグを打った

<div id=”toprss”>
<?php
include_once(ABSPATH . WPINC . ‘/feed.php’);
$rss = fetch_feed(array(
‘RSSのURL’
));
if (!is_wp_error( $rss ) ) :
$rss->set_item_limit(5);
$rss->set_cache_duration(1800);
$rss->init();
$maxitems = $rss->get_item_quantity(5);
$rss_items = $rss->get_items(0, $maxitems);
date_default_timezone_set(‘Asia/Tokyo’);
endif;
?>
<ul class=”other_rss”>
<?php if ($maxitems == 0) echo ‘<li>更新情報がありません。</li>’;
else
foreach ( $rss_items as $item ) : ?>
<li>
<?php
echo ‘<a href=”‘ . esc_url( $item->get_permalink() ) . ‘”>’;
if ( preg_match_all( ‘/src=”([^”]*)”/’, $item->get_content(), $image ) ) {
if ($image[1]) {
echo ‘<img src=”‘ . esc_url( $image[1][0] ) . ‘” alt=”no title”/>’;
}
}
echo ‘</a>’; ?><br>
<?php echo $item->get_date(“Y年n月j日”); ?><br><a href='<?php echo $item->get_permalink(); ?>’ target=”_blank”>
<?php echo $item->get_title(); ?></a>
</li>
<?php endforeach; ?>
</ul></div>

以上です。

一応「$rss->set_cache_duration(1800);」で60秒×α分=1800(今回α=30分)で、通常12時間ほどかかるキャッシュを早めに取得するようにしているのがミソです。
それでももし取得に時間がかかっていると感じた場合はwp-includes/feed.phpを開き

$feed->set_cache_duration( apply_filters( ‘wp_feed_cache_transient_lifetime’, 12 * HOUR_IN_SECONDS, $url ) );

$feed->set_cache_duration( apply_filters( ‘wp_feed_cache_transient_lifetime’, 1800, $url ) );

に変えてみてください。

コメントを残す