みーちゃん
こんにちは!絵も描く戦略型デザイナーのみーちゃんです。
突然ですが、別ブログの記事をホームページに掲載したい!ということはありませんか?
私は、ブログは絶対SWELLテーマを使って書きたい!でも自分のホームページはSWELLテーマは使いたくないっ!!という欲がありまして、メインのホームページと、このコラムブログは別々のWordPressで動いています。
でも、自分のホームページにはブログの新着記事を載せたい!!WordPressのRSSフィードを使えばWordPress記事は取得できるけど、画像までは取得できない・・・
結果、解決策はブログのRSSフィードを取得してそれをホームページに掲載する!ということでした!
おまじないコードを入れるだけで簡単にできるのでご紹介します〜!
目次
WordPressのRSSフィードについて
WordPressはで初期状態でいろいろなフィードを生成してくれています!
どんなフィードが生成されているか確認する時は、サイトURLに/feed/を加えてアクセスすると確認できますよ!
https://example.com/feed
ちなみにカテゴリ別の記事を取得したい場合は
https://example.com/category/category-name/feed
という感じで、取得することも可能です!
カテゴリ別の記事まで取得できるとか、すごくない・・・?
配信側のサイトのRSSフィードにアイキャッチ画像が含まれていない場合
配信側のサイトで/feed/を加えてアクセスしたときに、CDATA内に、.pngや.jpgといった画像が含まれていない場合は、RSSフィードにアイキャッチ画像が含まれていない場合があります。
その場合は、配信側のfunctions.phpに下記のコードを追加してあげます!
function rss_add_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
return '<p>' . get_the_post_thumbnail($post->ID) .'</p>' . $content;
}
return $content;
}
add_filter('the_excerpt_rss', 'rss_add_thumbnail');
add_filter('the_content_feed', 'rss_add_thumbnail');
記事出力のためのコード
<div class="parts-blog">
<?php include_once( ABSPATH . WPINC . '/feed.php' );
$feeduri = 'https://p3wave.com/blog/feed/';
$rss = fetch_feed($feeduri);
if (!is_wp_error($rss)) {
$maxitems = $rss->get_item_quantity( 3 ); //最新3件だけ取得する
$rss_items = $rss->get_items( 0, $maxitems ); // 0件から始めて指定した件数までの配列を生成
}
foreach ( $rss_items as $item ) : ?>
<!-- 記事へのリンク -->
<div class="parts-blog__item">
<a href="<?php echo $item->get_permalink(); ?>">
<!-- 記事の最初の画像を表示 -->
<?php
$first_img = "";
if ( preg_match( '/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches ) ) {
$first_img = $matches[1];
}
?>
<div class="parts-blog__img"><img src="<?php echo esc_attr( $first_img ); ?>" alt=""></div>
<!-- 記事のタイトルを表示 -->
<h2 class="parts-blog__title">
<?php
$title = $item->get_title();
if(mb_strlen( $title ) > 100 ): ?>
<?php echo mb_substr( $title,0,100 );?>
<?php else : ?>
<?php echo $title ;?>
<?php endif; ?>
</h2>
<div class="d-block d-md-flex">
<!-- 投稿時間を表示 -->
<?php
$item_date = $item->get_date();
$date = date('Y.m.d',strtotime( $item_date )); ?>
<p class="parts-blog__date"><?php echo $date; ?></p>
<!-- カテゴリーを表示 -->
<?php /*
if ( $category = $item->get_category() ) {
echo '<div class="parts-blog__cat">';
echo esc_html( $category->get_label() );
echo '</div>';
}
*/ ?>
</div>
</a>
</div>
<?php endforeach; wp_reset_postdata(); ?>
</div>