web-dev-qa-db-fra.com

Comment puis-je récupérer les informations de flux à partir du cache plutôt que directement à partir de flux?

J'utilisais SimplePie pour récupérer des éléments d'un flux et les afficher dans une section à part de mon site. Je n'avais pas remarqué auparavant, mais cela augmentait le temps de chargement du site de plus de 10 secondes. La raison pour laquelle je pense que je n’utilise pas le cache, c’est pourquoi chaque fois que quelqu'un accédait au site, il/le téléchargerait à nouveau.

J'ai donc créé une tâche cron comme me l'a dit la documentation . Créer update_simplepie_cache.php dans public_html. Cela a fonctionné et le travail cron a créé un fichier dans public_html/cache/.

La question est la suivante: comment puis-je modifier mon balisage actuel pour extraire les informations du cache plutôt que directement du flux?

Voici le balisage que j'ai utilisé (c'est dans 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

Vous pouvez simplement utiliser fetch_feed() qui implémente sa propre extension de 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 ) );

qui met en cache les flux avec set_transient().

2
birgire