Beginner's Guide for WordPress / Start your WordPress Blog in minutes

How to Create Custom RSS Feeds in WordPress

Do you want to create a custom RSS feed in WordPress?

WordPress comes with a default RSS feed that shows your website content. However, if you have a specific type of content, then you may want to create a custom RSS feed for it.

In this article, we will show you how to easily create a custom RSS feed in WordPress.

Create custom RSS feed in WordPress

Why Create a Custom RSS Feed in WordPress?

WordPress comes with a built-in RSS feed, and you can easily add custom content or thumbnails to it.

However, if you have a specific type of content or post type on your WordPress website, then you may want to create a custom RSS feed for it.

For example, if you deliver exclusive content to your subscribers from specific authors, then you can create a custom RSS feed to keep your subscribers informed about the content.

Additionally, custom feeds also allow you more freedom by enabling you to add the author’s name, publication dates, or any other relevant information, providing more details to your users.

Having said that, let’s see how to easily create custom RSS feeds in WordPress, step by step.

Note: You should create a complete backup of your WordPress website before making any major changes to a live website.

How to Create a Custom RSS Feed in WordPress

You can easily make a custom RSS feed in WordPress by adding custom code to your theme’s functions.php file.

This feed will display the title, link, published date, author, and excerpts from the posts on your WordPress site.

However, keep in mind that the smallest error while typing this code can break your website and make it inaccessible.

That is why we recommend using WPCode. It is the best WordPress code snippets plugin on the market that makes it safe and easy to add custom code to your website.

First, you need to install and activate the WPCode plugin. For detailed instructions, see our beginner’s guide on how to install a WordPress plugin.

Note: You can use the free WPCode plugin for this tutorial. However, upgrading to the paid plan will unlock more features like the test mode, CSS Snippet option, cloud library, conditional logic, and more.

Upon activation, visit the Code Snippets » + Add Snippet page from the WordPress dashboard. Here, click the ‘Use Snippet’ button under the ‘Add Your Custom Code (New Snippet)’ option,

Add new snippet

This will take you to the ‘Create Custom Snippet’ page, where you can start by typing a name for the code snippet.

Next, choose the ‘PHP Snippet’ option from the Code Type dropdown menu on the right.

Choose the PHP Snippet option to create a custom RSS feed

Once you do that, add the following custom code into the ‘Code Preview’ box:

add_action('init', 'customRSS');
function customRSS(){
        add_feed('Feed', 'customRSSFunc');
}function customRSSFunc(){
        get_template_part('rss', 'feedname');
}<?php
/**
 * Template Name: Custom RSS Template - Feedname
 */
$postCount = 5; // The number of posts to show in the feed
$posts = query_posts('showposts=' . $postCount);
header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
?>
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        <?php do_action('rss2_ns'); ?>>
<channel>
        <title><?php bloginfo_rss('name'); ?> - Feed</title>
        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
        <link><?php bloginfo_rss('url') ?></link>
        <description><?php bloginfo_rss('description') ?></description>
        <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
        <language><?php echo get_option('rss_language'); ?></language>
        <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
        <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
        <?php do_action('rss2_head'); ?>
        <?php while(have_posts()) : the_post(); ?>
                <item>
                        <title><?php the_title_rss(); ?></title>
                        <link><?php the_permalink_rss(); ?></link>
                        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
                        <dc:creator><?php the_author(); ?></dc:creator>
                        <guid isPermaLink="false"><?php the_guid(); ?></guid>
                        <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
                        <content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
                        <?php rss_enclosure(); ?>
                        <?php do_action('rss2_item'); ?>
                </item>
        <?php endwhile; ?>
</channel>
</rss>

You can now change the name of your custom RSS feed to anything you like by replacing Feed text after the add_feed line in the code.

Once you have created this feed, you will then be able to view it by going to the yourdomain.com/feed/feedname URL.

Type custom feed name in the code

Next, scroll down to the insertion section and choose the ‘Auto Insert’ mode.

The custom RSS feed will automatically be created upon code activation.

Choose an insertion method

Finally, scroll back to the top and toggle the ‘Inactive’ switch to ‘Active’.

After that, click the ‘Save Snippet’ button to store your settings.

Save the custom RSS feed custom snippet

Once you have done that, visit the Settings » Permalinks page from the WordPress dashboard.

Here, simply click the ‘Save Changes’ button to flush the rewrite rules and generate new permalinks for your website.

Check Permalinks

You will now be able to view your custom RSS feed by visiting the yourdomain.com/feed/feedname URL.

Here is an example of the custom RSS feed on our demo WordPress website:

Custom RSS feed preview

Bonus: Troubleshooting Custom RSS Feed Problems

Here is a list of some errors that may occur when trying to create a custom RSS feed and how you can solve them.

I’m getting a 404 error when trying to view my feed!

If you get the 404 error when trying to view your custom feed, then check to see if you are using the correct feedname in your URL.

It has to be the one you supplied in the add_feed function. If you have the correct feedname, then your rewrite rules may not have flushed correctly. You can easily do that by re-saving your permalinks.

If you have re-saved your permalinks and the problem still persists, then you can force a rewrite flush by adding this code in your WPCode snippet next to the add_ feed function:

global $wp_rewrite;
$wp_rewrite->flush_rules();

My feed isn’t validating!

The W3C offers a feed validation service that allows you to validate the resulting feed and provides specific details as to where your feed isn’t validating.

You can then easily edit the code snippet to resolve these issues.

I’m getting a <language /> validation error!

This is common where the RSS language has not been configured on your WordPress installation.

To do this, you can add the following code to WPCode to update the language option:

function rssLanguage(){
        update_option('rss_language', 'en');
}
add_action('admin_init', 'rssLanguage');

Once you do that, edit the second argument of the update_option function to change the language to the one that you require. Check out the full list of RSS Language Codes.

Once you save the snippet, the error will be removed, and you will be able to view your custom RSS feed.

We hope this article helped you learn how to create a custom RSS feed in WordPress. You may also want to see our tutorial on how to make separate RSS feeds for each category and our expert tips to optimize your WordPress RSS feeds.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us. Here's our editorial process.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit - a collection of WordPress related products and resources that every professional should have!

Reader Interactions

67 CommentsLeave a Reply

  1. Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. Is there any way to make this permanent? I keep having to repeat this step every few weeks when the theme is updated.

  3. is there any plugin to do this kind of custom rss feed XML? I want to use my own tag xml.

    • We do not have a recommended plugin at this time, we will be sure to keep an eye out.

      Admin

  4. I need to create an XML feed for a specific page on my WordPress website. Here is the page will I have to edit my functions.php file or is there an easier way?

  5. Hello,

    This article is very helpful but I got some issue.

    I did exactly like in your code. But it gives me an error as
    This page contains the following errors:

    error on line 1 at column 7: XML declaration allowed only at the start of the document
    Below is a rendering of the page up to the first error.

    Could you please help me out what could possibly go wrong here?
    This is very important for me.

    Thank you.

  6. Hi, is it possible to change de order of the posts in my feeds without creating a new custom feed? I want to use the current feed files but just want to change the displayed order of theme. Using PHP queries as an example, changing order from DESC to RAND()

    I will appreciate you help. Thanks.

  7. Great post! I definitely fall under the rookie status. Many feed readers/aggregators don’t seems to like the /feed/ URL structure, even through the xml returned validates. Is there a way to append the url to end with rss.xml?

  8. Sorry to say, however, implementing the codes for custom rss has effectively wiped out my entire blog. Having to do a restore and it is taking a long time to get my blog back up. Any advise?

    • You need to connect to your site via FTP or your hosting’s file browser in cPanel, and simply remove what you added. If you added the code as a custom plugin, then just rename the plugin folder. If you added the code in functions.php, edit the file and remove the code. Don’t forget to backup the file before editing. Hope this helps for the next time.

  9. Never mind, it does. I had a bug with YOAST SEO that with the /category/ prefix removal. I have warned them of it I hope they will fix it.

  10. Hello, thank you for the article, but it seems this will only work for the main site feed, not for the specific catgories feeds:

    mysite.com/category/mycat/feed/feedname/

  11. Doesn’t work anymore.
    I got a 404 error, so I activated debug mode. Debug mode says “Notice: The Called Constructor Method For WP_Widget Is Deprecated Since Version 4.3.0! Use __construct()”

  12. unfortunately this is restricted in its usefulness. inserting screenshots and sample pages would be very helpful, particularly for amateurs/rookies like me.

  13. Please see below screenshots – what determines the “…” or “[…]” or “Read More ->” etc etc in feeds?

    I’m using the default /feed in 2 different WP sites & these 2 screenshots obviously are showing something different at the end of their excerpts. Thanks!

  14. Apologizes but that code did not come through clear lol. Lets try that again. Go here to see the exact, raw code I’m looking to remove:

  15. Hey, I want to exclude certain post_formats from my custom rss feed. Is that possible and if so, how?

  16. Hello,

    When I try to view the feed I got 404 Page not found error. I am trying to add code:

    global $wp_rewrite;
    $wp_rewrite->flush_rules();

    then I also got same error. Could this be why?

    • Got it to work neatly thanks to birgire at Stack exchange:

      add_action( ‘init’, ‘custom_feeds’ );

      function custom_feeds()
      {
      foreach( array( ‘feedname1’, ‘feedname2’ ) as $name )
      {
      add_feed( $name,
      function() use ( $name )
      {
      get_template_part( ‘rss’, $name );
      }
      );
      }
      }

  17. The “follow” button shows up at the bottom right corner when viewing posts on a personal computer, but does not appear when viewing on a mobile devise (smartphone) (unless I’m just missing it.

  18. Sorry, but everything about this is misleading. this is not “beginner” work. and it is not worded for beginners. This is totally irresponsible and can cause major issues to people’s websites.

  19. I got this working (kind of). The feed page exists, but will not validate and says there is an error on line 1.

    I copied the code exactly from this page and haven’t changed anything. What could be going wrong here?

    • W3 will not validate mine as well and says there is an error on line 17.

      And I am getting the 404 page!

      What should I do?

  20. Hello,

    Please i need help in configuring my rss to show all my post content on not just an excerpt of it.

    Thank you.

  21. Hello,
    I need to show only date without time for pubDate. When I use

    It’s doesn’t work for firefox,IE.
    Can you help me?

    Thank you in advance!

  22. Hi.

    I would like to change the update pattern of the feed with

    sy:updatePeriod
    echo apply_filters( ‘rss_update_period’, ‘weekly’ );
    /sy:updatePeriod

    sy:updateFrequency
    echo apply_filters( ‘rss_update_frequency’, ‘1’ );
    /sy:updateFrequency>

    sy:updateBase
    2015-03-29T01:00:00+09:00
    /sy:updateBase

    But whatever I tried, it automatically adds a new post when I publish it and does not wait till Sunday ( as defined in the code above) to add it to the RSS.

    Do you have any suggestions? Do I maybe need to find a solution within the WP Query?

    Your help would be much appriciated.

  23. Hi.

    I would like to change the update pattern of the feed with

    2015-03-29T01:00:00+09:00

    But whatever I tried, it automatically adds a new post when I publish it and does not wait till Sunday ( as defined in the code above) to add it to the RSS.

    Do you have any suggestions? Do I maybe need to find a solution within the WP Query?

    Your help would be much appriciated.

  24. Hi.I try to do as your mention but I’ve seen my site cannot access to the feed page.This is My site I try to use /feed and a lot of word which is mention in wordpress.com or wordpress.org even in the google.Please help me.

  25. What determines that the feed will be displayed at feed/feedname? I have tried to follow the tutorial, but not luck at all. The feed is not publishing at feed/feedname.php

  26. Following these exact steps I got this error:

    Fatal error: Cannot redeclare get_bloginfo_rss() (previously
    declared in
    /home/public_html/wp-includes/feed.php:25)
    in /home/public_html/wp-content/themes/xxx/rss-name.php on line 39

  27. Hi,

    My feed is OK when this code is added:

    global $wp_rewrite;
    $wp_rewrite->flush_rules();

    and returns a 404 when it is removed.
    I only remove it as per your instructions, which is to remove it after reloading wordpress.

    At this moment I am testing it on my local server. Could this be why?

  28. Hi there. Thanks for this post! Really appreciated. Worked well at first go! :)

    I would also like some assistance as Brian below. For the full text in the RSS instead of the post excerpt.

    Thanks in advance.

  29. I am trying to add a second RSS feed that is full text (my first RSS feed is summary). If I wanted this custom RSS feed to be full text instead of summary excerpt, what would I change?

    Thanks so much!

  30. Thanks for this. Just what I was looking for!

    I had an issue when I used add_feed(). I could view the RSS feed in the browser absolutely fine, but it would return a 404 when I entered the URL into a third party application (ie. MailChimp, W3C feed validator etc). I had tried flushing the permalinks etc.

    The only way I could get round the issue was to create a new blank page and select the template as the one you’ve outlined in this article.

    Not sure why it didn’t work, but hopefully this offers a viable solution for others in this situation.

    Thanks again!

  31. Your article is right on the path of what I was looking for. One question I have (as a noob to RSS), how can I add a link to an RSS feed?
    The site that I need this for is a church and would like to have a custom feed that would make it easier for our members to be alerted to newly posted sermon posts (that have mp3 download links).
    Currently, the feed shows the text for the links that I have created on the posts for the sermons. But it only acts as text. Any help would be appreciated.

    • Just noticed that I didn’t ask my question correctly.
      What I was trying to ask was, how can I display a link in the RSS Feed? The links that are in the content of my posts are broken in the feed.
      Thanks for your help and this article.

    • Still curious, if anyone knows why my links would be broken and only show as plain text in a feed?
      To see what I mean checkout: http://amfmchurch.com/feed
      You will see “Download” in plain text. I would like to make it so that people can click the anchor link and download the mp3. This works find on the actual site.

      Thanks for any help.

  32. Hi, I have the default rss feed.. but I would like to be able to either reduce the size of the images from what is displayed in the post…. (to a maximujm width of 265px) OR to just use the post thumbnail in the rss.

    Is either of the above possible?

    The reason I am looking to do this is that my RSS feeds an APP and the APP will only display images up to 265px in width (before horizontal scrolling) and 265px is very limiting for online/pc blog posts…

  33. Thank you for this! I am making a custom RSS location part of a plugin I’m developing. As a result, I have included the text for the custom RSS in the function, not in a theme template. It’s working. However, it does not seem to work when I want to restrict the feed to a category. It gives all posts regardless. Any thoughts?

  34. Hello,

    Thank you, these explanations are really useful. I just used it to customize my feed so I could put an image in mailchimp’s “RSS to email” feature.

    Thank you very much !

  35. Hello,

    Till yesterday afternoon, my WordPress (version 3.6.1) blog http://theoff.info/wordpress/ had no problem. And I successfully added new plugins.

    In the night, problems started: (1) I could not login. (2) the RSS feed http://theoff.info/wordpress/?feed=rss2 got corrupted. The feed failed validation.

    I searched the Web and WordPress Support Forum for solutions. I tried the following:
    (i) successfully reset the password
    (ii) deleted new plugins from ftp
    (iii) renamed Theme folder by adding “-old” and plugin folder by adding “-hold” from ftp

    Then I could login and up grade to 3.7.1 version and make changes to the blog.

    However, login is still an issue. Every time I am following method mentioned in step (iii) to login.

    RSS still does not validate.

    Could you help in resolving both login and RSS feed problems?

    Note: My webhost does not offer technical help. I am not an IT professional i.e. I have very little technical knowledge.

    Thanks

    • It is difficult to figure out. Here is one thing you can try.

      1. Using FTP download your plugins to your computer for backup and then delete your plugins directory.
      2. Create a new plugins directory.
      3. Install and all your plugins one by one by downloading fresh copy of the plugin from the source. After you activate each plugin log out and and log back in to see if the problem occurs again. You will probably find a plugin that may be causing the problem or you wont. This could mean that a plugin file on your site may have been compromised.

      If this process does not help you, repeat this process process with your themes as well. If you have made a lot of changes to your existing themes then you might want to back it up on your computer by downloading theme folder through FTP. Then delete themes folder from your webserver and create a new themes directory in wp-content folder on your server. From WordPress admin area download and install a fresh copy of default twenty thirteen theme.

      Let us know what happens when you do all that. Make Sure to Backup your Site first.

      Admin

  36. Hello,

    When I try to open the new feed, I get an error message:

    Fatal error: Call to undefined function query_posts() in /xxxx/wp-content/themes/xxx/rss-feedname.php on line 6

    I tried on localhost and web hosting, it is the same…

    How can I fix it?

    Thanks

Leave A Reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.