I realised that I wasn't properly handling the return value on a feed I was grabbing to display the "Spiffy things from the Internet" section of the blog. I went to WordPress to look up the fetch_rss API details, only to find that it had been deprecated in WordPress 2.8.something. Being the ever-vigilant beacon of vigilance, I decided to covert my feed-fetching to feed_fetch. Here's what I had to do.
There's not much to it, for the simple stuff. But SimplePie (the rss class that feed_fetch uses) has a LOT of advanced options that you should check out. For a basic feed we just need to update a couple of calls.
From the old code:
<ul>
<?php
include_once(ABSPATH . WPINC . '/rss.php');
$rss = fetch_feed('http://feed_url_here');
foreach ( $rss->items as $item ) :
?>
<li>
<a href='<?php echo $item['link']; ?>'>
<?php echo $item['title']; ?>
</a>
<?php echo $item['summary']; ?>
</li>
<?php endforeach; ?>
</ul>
To the new code:
<ul>
<?php
$rss = fetch_feed('http://feed_url_here'');
foreach ( $rss->get_items() as $item ) :
?>
<li>
<a href='<?php echo $item->get_permalink(); ?>'>
<?php echo $item->get_title(); ?>
</a>
<?php echo $item->get_description(); ?>
</li>
<?php endforeach; ?>
</ul>
All we have done is moved from array indexes ($item['title']) to class getters ($item->get_title()). And we're away! If you hunt through the SimplePie docs, you'll notice that there are options to set cache files, timeout times, content types etc... But don't worry about these: WordPress handles it in the fetch_feed wrapper it provides.
3 Comments
Thanks for the help, although I believe you forgot the “echo” in getting the permalink.
Thanks Mike… updated.
It seams fetch_feed() in old code should be fetch_rss().