RSS is one of those technologies that are extremely simple yet extremely powerful. Currently, RSS is the de facto standard for blog syndication, and it is used widely in both personal and corporate settings; for example, in blogs. And because a large percentage of these blogs run on WordPress, we’ll cover in this post some (hopefully) relatively unknown but useful RSS-related tricks and hacks that will help you use RSS in a more effective way — and without unnecessary and chunky WordPress plug-ins. This article has been reviewed and updated on Nov. 24th, 2016
Further Reading on SmashingMag:
- Easily Customize WordPress’ Default Functionality
- 10 Tips To Optimize Your WordPress Theme
- Guide To WordPress Coding Standards
- Writing Unit Tests For WordPress Plugins
Let’s take a look at 10 useful, yet rather unknown RSS-tricks for WordPress. Each section of the article presents a problem, suggests a solution and provides you with an explanation of the solution, so that you can not just solve some of your RSS-related problems but also understand what you are actually doing. Thus, you can make sure your WordPress theme remains under your control and is not bloated with some obscure source code.
1. Control When Your Posts are Available via RSS
The problem. Have you ever published an article and then immediately noticed an error? Sure, you can edit it, but there’s another problem: the article has already been published in your RSS feed. To avoid this kind of problem, use this recipe to create a delay between the publication of a post and its availability in your RSS feed.
The solution. To apply this hack, simply paste the following code into your theme’s function.php file. If your theme doesn’t have this file, just create it.
function publish_later_on_feed($where) {
global $wpdb;
if ( is_feed() ) {
// timestamp in WP-format
$now = gmdate('Y-m-d H:i:s');
// value for wait; + device
$wait = '5'; // integer
// http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
$device = 'MINUTE'; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
// add SQL-sytax to default $where
$where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
}
return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
Code explanation. The above code will add a 5-minute delay to the time between when your post is published on your blog and when it appears in your RSS feed. To change the length of the delay, change the value of the $wait variable on line 9.
Sources
2. Redirecting WordPress Feeds to FeedBurner Feeds
The problem. Beginner bloggers usually start to use FeedBurner only after they have seen it used on many other blogs and realize how useful and cool this tool is. They sign up and start to use it, but their early readers are already subscribed to their default WordPress feed.
Another problem: do you often change your theme? If so, you must be bored having to edit each call to bloginfo(’rss2_url’) and replace it with your FeedBurner feed’s URL.
The solution. The solution to both problems described above is simple: use server redirections.
- Create a backup of your .htaccess file, located in the root of your Web server.
Edit the .htaccess file and add the following code. Don’t forget to modify the feed’s URL with your own feed’s URL.
# temp redirect wordpress content feeds to feedburner <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/wprecipes [R=302,NC,L] </IfModule>
Save the file. You’re done!
Code explanation. Each time someone clicks on a link to http://www.yourblog.com/feed, he or she will be redirected to http://feeds.feedburner.com/yourblog. This way, you will have never lost an RSS subscriber, and even if you change your theme twice a day, you’ll never have to manually edit your RSS feed links again.
Sources
- Redirect WordPress feeds to FeedBurner via htaccess (Redux)
- How to: redirect WordPress RSS feeds to FeedBurner with .htaccess
3. Insert Ads (or Anything Else) in Your RSS Feed
The problem. Monetizing RSS feeds is currently becoming a common practice, and many blog owners do it to maximize their income. FeedBurner can insert AdSense ads into your feed items, but you need at least 500 subscribers to qualify, and you can’t use any ads other than the AdSense ads provided by FeedBurner.
The solution. It is possible, though, to insert other kinds of ads into your RSS feed. You can, for example, use a link to a free WordPress theme only for your RSS subscribers.
Follow these simple steps to perform this hack:
- Edit the functions.php file of your theme. If your theme doesn’t have a functions.php file, simply create one.
Paste the following code into your functions.php file:
<?php function insertAds($content) { $content = $content.'<hr /><a href="http://www.wprecipes.com">Have you visited WpRecipes today?</a><hr />'; return $content; } add_filter('the_excerpt_rss', 'insertAds'); add_filter('the_content_rss', 'insertAds'); ?>
Save the file. You’re now displaying your ads in your RSS feed!
Code explanation. I have seen many similar hacks on the Web, but all of them require you to edit WordPress core files to achieve the same result. Of course, editing WordPress core files is a very bad idea because then you would have to re-edit the files each time you upgrade your blog. Instead, this hack uses the add_filter() WordPress function to insert content into your RSS feed without editing any core files.
Sources
4. Format Your Images for Feed Readers
The problem. You took a lot of time to write and format your post and add beautiful screenshots. It looks so good on your blog. Sadly, when the post is displayed in Google Reader or any other RSS reader, it doesn’t look so great.
The solution. This is due to the fact that most feed readers display images inline with text: To avoid this problem, add a CSS class to display the image as a block. WordPress provides the built-in class “center“:
<img src="https://www.smashingmagazine.com/images/wordpress-rss-hacks/myimage.jpg" alt="This is my image" class="center"/>
Sources
5. Provide Your Readers with a Feed for Each Post
The problem. When a post has lots and lots of comments, it can be hard for readers to follow the conversation. Most WordPress users don’t know this, but our favorite blogging engine has a built-in function for providing an RSS feed for the comments in each post.
The solution. Well, this recipe isn’t really a hack or anything: to provide an RSS feed for the comments in a particular post, just call the comment_rss_link() function:
<?php comments_rss_link('» Comments RSS Feed'); ?>
Update: the comment_rss_link() function has been deprecated. Use the post_comments_feed_link() function instead.
<?php post_comments_feed_link('» Comments RSS Feed'); ?>
Sources
6. Exclude Categories from Your RSS Feed
The problem. Do you use one of your blog categories to let readers know about your website’s news, or does your blog feature a category that has nothing to do with the rest of your content? If so, it is generally not a good idea to include it in your RSS feed.
The solution. Here’s how to get rid of one of the categories in your RSS feed:
- First, get the numeric ID of the category you want to exclude. If you don’t know how to get the ID of a particular category, you can learn how here.
- Once you have the ID of the category you want to exclude from your RSS feed, edit the functions.php file in your theme. Create the file if it doesn’t exist.
Paste the following code in it:
function myFilter($query) { if ($query->is_feed) { $query->set('cat','-5'); //Don't forget to change the category ID =^o^= } return $query; } add_filter('pre_get_posts','myFilter');
Save the file, and you’re done!
Code explanation. This hack works exactly the same way as the previous one: create a custom function to exclude the category that you don’t want to appear in your RSS feed, and then use the super-useful add_filter() function to apply it to the pre_get_posts() WordPress core function. The minus is important before the numeric ID. Without the minus, only this category will be used.
7. Display Any RSS Feed on Your WordPress Blog
The problem. Do you have more than one blog, or do you manage a forum? If so, you may want to be able to display any RSS feed on your WordPress blog.
The solution. Many plug-ins can do the job, but they’re not necessary at all. WordPress has a built-in RSS reader that is used, for example, to display news on your dashboard. All you have to do is use it in your theme.
Paste the following code anywhere in your theme (personally, I’d put it in the sidebar, the footer or, even better, the page template):
<?php include_once(ABSPATH.WPINC.'/rss.php'); wp_rss('http://feeds.feedburner.com/wprecipes', 3); ?>
Save it and you’re done. It’s as easy as that!
Code explanation. The first thing we have done is include the rss.php file from WordPress core. This file allows us to use the wp_rss() function, which takes two parameters: the first is the RSS feed’s URL, and the second is the number of RSS entries to be displayed.
Sources
8. Use Category-Specific RSS Feeds
The problem. Many blogs talk about a lot of different topics: design, programming, blogging tips, etc. Have you ever come across a blog in which you have enjoyed only one category of posts? If so, you should definitely consider offering one feed per category to your own readers.
The solution. Let’s say you’d like to be able to subscribe only to TheGridSystem’s tools section. The category URL is:
http://www.thegridsystem.org/categories/tools/
To get an RSS feed for this category, you simply have to add /feed to the end of the URL:
http://www.thegridsystem.org/categories/tools/feed
Pretty easy, isn’t it? But pretty useful, too, in my opinion.
9. List RSS Feeds by Category
The problem. If you like the previous hack, you will probably also want to be able to display the names of all your category feeds in a list to your readers.
The solution.
- Edit any of your theme files, where you want to list your categories and their accompanying feeds.
Paste the following code:
<?php wp_list_categories('feed_image=http://www.myblog.com/image.gif&feed=XML Feed&optioncount=1&children=0'); ?>
Save the file. You categories will now be displayed, along with their RSS feeds!
Code explanation. This hack uses only the good old wp_list_categories() function, with two parameters. The first is feed_image, which allows us to specify the URL to be displayed as a feed image. The second parameter is feed, which is used to specify the feed format.
10. Get Rid of RSS Feeds the Clean Way
The problem. Let’s say you’re using WordPress as a CMS to manage your online portfolio or your company’s website. In such cases, the RSS feed isn’t that useful, and some people would probably want to remove it.
The solution. I have seen many “hacks” on the Web where people say you just have to remove the include on the wp-settings.php core file. I don’t think you should ever edit a core file. Instead, the following hack will do the job. Simply paste this code in the functions.php file of your theme:
function fb_disable_feed() {
wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);