Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

外部WordPressサイトから投稿記事をRSSで読み込み、表示

No Comment wordpress,,

■やりたい事…Wordpressサイト1の投稿記事を、他サーバにあるWordpress2サイトで取得、表示。

同一DBサーバのWPから記事を持ってくる方法は他にあるみたいけど、設定が煩雑なのとDBサーバに外部接続用のユーザを作ったりしないといけないのでレンタルサーバでは荷が重いか。

今回はWordpress自体が出力しているRSSを取得・表示する方法。
(出典・モンキーレンチ様。こことかこことか)

<?php
include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed('http://hogehoge.com/feed'); // RSSの取得元URL
if (!is_wp_error( $rss ) ) : $maxitems = $rss->get_item_quantity(3); // 記事数
	$rss_items = $rss->get_items(0, $maxitems); 
endif;
?>

<ul>
<?php
if ($maxitems == 0): echo '<li>記事はありません</li>';
else :
date_default_timezone_set('Asia/Tokyo');
foreach ( $rss_items as $item ) : ?>

<li><a href="<?php echo $item->get_permalink(); ?>" target="_blank" rel="bookmark"><?php echo $item->get_title(); ?>
<span class="news-date"><?php echo $item->get_date('(Y/m/d)'); ?></span></a>
</li>

<?php endforeach; ?>
<?php endif; ?>
</ul>

で可能。
ただ、上記でRSSを取得した場合、取得した側のWordpressで最大12時間のキャッシュが効いてしまって最新記事が取得できないことがある。
なので、取得先Wordpressサイト1のfunction.phpに追記して、キャッシュ時間を変更する。

return 数値を秒で指定する。30分なら1800を入力することで、30分ごとにRSSキャッシュを更新してくれる。

add_filter( 'wp_feed_cache_transient_lifetime', function(){'return 1800;';});

上記はPHP5.3から使用可能な無名関数を使用。
ちなみにそれ以前のverの場合は

add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 1800;' ) );

と匿名関数(create_functionで定義)を使うか、

function return_rss_num() {
	return 3600;
}
add_filter( 'wp_feed_cache_transient_lifetime' , 'return_rss_num' );

関数を作って入れることになる。

匿名関数と無名関数の違いはこちら

PHP5.3以降を使用している場合は、PHPマニュアルにもあるように無名関数を使用したほうがよさそう。

警告 / この関数は、内部的に eval() を実行しているので、 eval() と同様にセキュリティ上のリスクがあります。 さらに、パフォーマンスやメモリ使用効率の面でも問題があります。
PHP 5.3.0 以降を使っている場合は、この関数ではなく、ネイティブの 無名関数 を使うべきです。(出典・PHPマニュアル)

他にも無名関数は匿名関数の倍の処理速度だそうで。