web-dev-qa-db-ja.com

フィードから直接ではなくキャッシュからフィード情報を取得する方法を教えてください。

SimplePieを使ってフィードからアイテムを取得し、自分のサイトの脇のセクションにそれらを表示しています。以前は気付かなかったが、これはサイトのロード時間を10秒以上長くしていた。私が信じているのは、私はキャッシュを使っていないので、誰かがサイトに入るたびに、彼らは再びフィードにアクセスしたりダウンロードしたりするだろうということです。

だから私は ドキュメント が教えてくれたようにcronjobを設定しました。 public_htmlにupdate_simplepie_cache.phpを作成します。これはうまくいき、cronジョブはpublic_html/cache/にファイルを作成しました。

問題は、フィードから直接ではなくキャッシュから情報を取得するように現在のマークアップを変更する方法を教えてください

これが私が使ってきたマークアップです(これはfront-page.phpにあります)

<?php 
require_once  (ABSPATH . WPINC . '/class-feed.php');
$feed_url = 'feed://nordiccoffeeculture.com/feed/';
$feed = new SimplePie();
$feed->set_feed_url($feed_url);
$feed->init();
?>

<?php foreach ($feed->get_items(0, 6) as $item): ?>
    <div class="col-lg-2 col-md-2 col-sm-4 col-xs-12 nordic-blog-item">
        <?php 
        $rss_image = ($item->get_item_tags('', 'image'));

        if ($rss_image) { ?>
            <a class="recent-blog-img-link" href="<?php print $item->get_permalink(); ?>"><img srcset="<?php print $rss_image[0]['data']; ?>"/></a><?php 
        } else { ?>
            <!-- takes the first image of the RSS item content, and displays it -->
            <a class="recent-blog-img-link" href="<?php print $item->get_permalink(); ?>"><img srcset="<?php get_first_image_url($item->get_content()); ?>"/></a><?php 
        }?>
        <h3><a href="<?php print $item->get_permalink(); ?>">
        <?php print $item->get_title(); ?></a></h3>
        <?php echo shorten($item->get_description(), 50); ?><br>
        <span class="nordic-date"><?php echo date_i18n('F j, Y', $item->get_date('U')); ?></span>
    </div>
<?php endforeach; ?>
1
turtledropbomb

単純に fetch_feed() を使用して、それ自身のSimplePie_Cacheの拡張を実装することができます。

$feed = new SimplePie();
...
$feed->set_cache_class( 'WP_Feed_Cache' );
...
$feed->set_feed_url( $url );
...
$feed->set_cache_duration( apply_filters( 
    'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) );

それはset_transient()でフィードをキャッシュします。

2
birgire