The Developer’s Guide to Feeds in WordPress

    Narayan Prusty
    Share

    A feed is a data format used for providing users with frequently updated content. Feed readers are used to read a feed, thereby allowing users to subscribe to it. Making a collection of feeds accessible in one spot is known as aggregation, which is performed by a feed aggregator.

    WordPress Feeds

    In this tutorial I’ll show you the different kinds of feed formats provided by WordPress and how to access them, with a focus on customizing them programmatically.

    Feed Formats Supported by WordPress

    WordPress supports four popular feed formats: RDF, RSS 0.92, RSS 2.0 and Atom. RSS 2.0 is the most popular feed format and is supported by almost every feed reader.

    The URL paths for these feeds are:

    http://example.com/?feed=rss
    http://example.com/?feed=rss2
    http://example.com/?feed=rdf
    http://example.com/?feed=atom
    

    You don’t have to hardcode them into your themes or plugins, you can just use the following functions to retrieve the URLs of the various feed formats:

    <?php 
        bloginfo('rdf_url'); 
        bloginfo('rss_url'); 
        bloginfo('rss2_url'); 
        bloginfo('atom_url');
    ?>

    These URLs retrieve the latest ‘posts’ of the site.

    WordPress Recent Comments Feed

    The above paths provide the latest posts of the site. To find recent comments we need to use the comments specific feed path:

    http://example.com/?feed=comments-rss2

    If you don’t want to hardcode it, you can use this function to retrieve the comments feed:

    <?php
        bloginfo('comments_rss2_url');

    WordPress also provides a feed for comments of a single post. To find the recent comments of a specific post the feed path is:

    http://example.com/?p=id&feed=rss2

    Again, if you don’t want to hardcode it, you can use this function to retrieve it:

    <?php
        post_comments_feed_link('link_text', 'post_id', 'rss2' );

    WordPress Category Feed

    WordPress provides a feed for every category. The feed path for a single category or multiple categories is:

    http://www.example.com/?cat=id1,id2&feed=rss2

    You can use this function to retrieve the feed URL of a single category or multiple categories by using the following:

    <?php
        get_category_feed_link('id1', 'rss2');

    Similarly, you can also get the feed URL of a tag or multiple tags too.

    WordPress Author Feed

    WordPress also provides a feed for the recent posts of an author. This is useful if a user wants to follow a particular author via a feed.

    The URL path of an author’s feed can be constructed using the below code:

    <?php 
        echo '<a href="' . get_author_link(0, $authordata->ID, $authordata->user_nicename) . 'feed/">' . the_author($idmode, false) . '</a>';

    Note: WordPress doesn’t provide any built-in functions to retrieve the URL of an author feed.

    WordPress Search Feed

    WordPress can also retrieve a feed for a search term. Here’s the feed URL path for a search term:

    http://example.com/?s=sitepoint&feed=rss2

    Check Feed Request

    In your theme or plugin, you can check if a request is a feed request or not by using the below code:

    <?php
        if(is_feed())
        {
            echo "Feed Request";
        }

    Here we are using the is_feed() function to check if the current request is a feed request or not. If yes, then it returns true.

    WordPress internally uses a built in feed template to display feeds. Using the do_feed action we can define our own feed templates.

    Remove Feeds

    If you don’t want to provide feeds on your site, then you can use the code below to disable all of them:

    <?php
    
        function disable_feed() 
        {
            wp_die(__("Feed Disabled"));
        }
        add_action('do_feed',      'disable_feed', 1);
        add_action('do_feed_rdf',  'disable_feed', 1);
        add_action('do_feed_rss',  'disable_feed', 1);
        add_action('do_feed_rss2', 'disable_feed', 1);
        add_action('do_feed_atom', 'disable_feed', 1);

    Filtering Feed Content

    To filter the description of a post in a feed only we can use the_content_feed filter. Here is an example on how to use it:

    function feed_word_count($content)
    {
       $content .= 'Total '.str_word_count($content).' words';
       return $content;
    }
    
    add_filter("the_content_feed", "feed_word_count");

    In WordPress 3.0 onwards, there is a theme support feature to add feed URLs to the head tag. If you’re a WordPress theme developer, then add this line of code to your theme’s function.php file to enable this feature.

    add_theme_support( 'automatic-feed-links' );

    Redirecting WordPress Feeds to FeedBurner Feeds

    Many site administrators prefer to provide their feeds using FeedBurner (or other third party services). This lets them track their feeds and number of subscribers.

    The dirty way to do this is by adding the below code to .htaccess file

    <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/name [R=302,NC,L]
    </IfModule>

    This code redirects requests to the latest posts feed to FeedBurner.

    If you’re hesitant to touch your .htaccess file, then you can use FeedBurner Plugin to do the same thing.

    More Actions and Filters

    WordPress provides many more actions and filters to customize our feeds. We’ve only covered some of the most important and useful ones.

    You can find many more feed related actions at WordPress Action Reference and filters at WordPress Filter Reference.

    Conclusion

    Many WordPress users prefer feed subscriptions rather than email or social subscriptions. As feed aggregators are now available for all platforms it’s a good idea to provide users an option to subscribe via feeds, with RSS 2.0 being the preferred format. You should also display an author feed and a comments feed if you have commenting enabled, not just recent posts feed.

    Let me know your experience with WordPress feeds below.