WordPress Snippet

ワードプレスをカスタマイズしよう

Feed Cache

WordPress2.8以降、SimplePieクラスが、RSSの出力を取り仕切っていますが、それ以前のMapieRSSも使うことが出来るようになっています。

SimplePieのスニペット

<?php
include_once(ABSPATH . WPINC . '/feed.php');
$rss= fetch_feed('http://bueltge.de/feed/');
$rss_items= $rss->get_items( 0, $rss->get_item_quantity(5) );
if ( !$rss_items ) {
 echo 'no items';
} else {
 foreach ( $rss_items as $item ) {
 echo '<p><a href="' . $item->get_permalink() . '">' . $item->get_title() . '</a></p>';
 }
}
?>

標準では、キャッシュライフタイムは、WP_Feed_Cache_Transient()で12Hにセットされます。
キャシュ時間の変更は、以下のフックで可能です。

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

デバグ中にRSSをキャッシュさせたくないなら、

function do_not_cache_feeds(&$feed) {
	$feed->enable_cache(false);
}

if ( defined('WP_DEBUG') && WP_DEBUG )
	add_action( 'wp_feed_options', 'do_not_cache_feeds' );

とすることが出来ます。

次に、MagpieRSSです。

<?php
include_once(ABSPATH . WPINC . '/rss.php');
$rss= fetch_rss('http://bueltge.de/feed/');
$rss_items= array_slice($rss->items, 0, 5);
if ( empty($rss_items) ) {
 echo 'no items';
} else {
 foreach ( $rss_items as $item ) {
 echo '<p><a href="' . $item['link'] . '">' . $item['title'] . '</a></p>';
 }
}
?>

wp-config.php

define('MAGPIE_CACHE_ON', 0); // deactivate cache
define('MAGPIE_CACHE_AGE', 60*60) // Cache 1 hour in seconds

この記事は、http://wpengineer.com/1820/feed-cache-in-wordpress/(title)の優れたチュートリアルをメモしたものです。

他には、options tableの

_transient_timeout_feed_mod_
_transient_feed_mod_* for feed's last modification time
_transient_timeout_feed_
_transient_feed_* for feed's content
_transient_timeout_feed_* for feed's cache duration

[emulsion_relate_posts]