如何从缓存而不是直接从提要获取提要信息?

时间:2015-08-21 作者:turtledropbomb

我一直在使用SimplePie从提要中提取项目,并将它们显示在我的站点上的一个备用部分。我之前没有注意到,但这会将站点的加载时间增加10秒以上。我之所以相信,是因为我没有使用缓存,所以每次有人进入网站时,他们都会再次访问/下载提要。

所以我设置了一个cronjob作为documentation 告诉我。正在创建update_simplepie_cache.php 在public\\u html中。这起作用了,cron作业在中创建了一个文件public_html/cache/.

The question is - how do I change my current markup to fetch info from the cache instead of directly from the feed?

这是我一直在使用的标记(位于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 个回复
最合适的回答,由SO网友:birgire 整理而成

你可以简单地使用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().

结束

相关推荐

如何删除FETCH_FEED()写入的瞬变?

我使用fetch\\u feed()缓存小部件中显示的外部rss源。如果小部件(或者更可能是整个插件)被删除/停用,我想手动删除所有相关的瞬态。在里面class-feed.php $filename被传递给WP\\u Feed\\u Cache\\u Transient{}的构造函数,该构造函数显然处理fetch\\u Feed的Transient。我只是还没有弄清楚如何生成变量来将其与小部件存储在一起,以便以后执行删除操作。