web-dev-qa-db-ja.com

Simplepieでキャッシュを使う方法

Docsによると、simplepieを使ってRSSフィードを取得するための結果をキャッシュしたい場合は、次のようにします。

 add_filter( 'wp_feed_cache_transient_lifetime' , 'return_7200' );
 $feed = fetch_feed( $feed_url );
 remove_filter( 'wp_feed_cache_transient_lifetime' , 'return_7200' );

私の質問は、(配列をループすることによって)いくつかのフィードURLの結果をキャッシュしたいのであれば、ループを通過するたびにフィルタを追加したり削除したりすることです。各フィード)または私はこれを行うべきです:

add_filter( 'wp_feed_cache_transient_lifetime' , 'return_7200' );

for ($i=.......){
  $feed = fetch_feed( $feed_url );
}

 remove_filter( 'wp_feed_cache_transient_lifetime' , 'return_7200' );

率直に言って(そしてこれは明らかかもしれません)、私が見たことはすべて複数のフィードではなく単一のフィードの例であるため、このキャッシングがどのように機能するかについて混乱しています。ありがとう。

4
Allen

コーデックスからあなたが使っている例はそれを追加したり削除したりするものであり(おそらくあなたがやりたいことではないでしょうが)、あまり明確ではありません。

デフォルトではWordPressはwp_feed_cache_transient_lifetimeを使用して12時間フィードをキャッシュします。12時間使用する実際のコードWPは$lifetime = 43200です。

すべてのシンプルフィードのキャッシュ時間をグローバルに変更したい場合は、フィルタに新しい時間を追加できます。

//change cache to 24hrs
add_filter( 'wp_feed_cache_transient_lifetime', create_function('$a', 'return 86400;') );

代わりに、特定のフィードに異なるキャッシュ時間を設定したい場合は、フィルタで$urlパラメータを使用できます。

add_filter( 'wp_feed_cache_transient_lifetime', 'change_feed_speed' );

function change_feed_speed( $lifetime, $url ) {

    if( 'http://mysite.org/some-feed.rss' == $url )
        return 86400;

    return $lifetime;
}
3
Wyck