Creating Custom WordPress RSS/XML Feed
You at some point in your WordPress development may need to provide someone with a custom feed. Whether that’s to provide someone an API, or just provide a better experience for a certain set of users, it is easily done.
I prefer to create a new feed rather than extend the default feeds as I find this method a bit simpler
add_feed WordPress function
add_filter('init','tj_init_custom_feed'); function tj_init_custom_feed() { //initialize the feed add_feed('custom-feed','tj_custom_feed'); }
In your functions.php file in your WordPress theme, add the code above. As its best not to call add_feed directly, we add it through a filter on ‘init’. The first parameter in the function call is used to provide the URL slug for the feed. The second parameter is used to tie it to a function name. So, when that url is called(yourblogurl.com/custom-feed), it executes the PHP function tj_custom_feed.
Please note that the rewrite rules for WordPress must be flushed before that URL will be recognized properly. A good simple way to force the rules to be flushed is to go to the WordPress Admin -> Settings -> Permalinks, and then click the save changes button.
Outputting the XML
There is really nothing too complex about outputting the RSS/XML feed code. First, the content-type is set via the php header function so it can be rendered appropriately. Next, we retrieve some data from get_posts, loop through it, and echo it out to the screen.
function tj_custom_feed() { header("Content-type: text/xml"); echo "\n"; echo "\n"; $posts = get_posts(); foreach($posts as $post){ $post_link = get_permalink( $post->ID ); $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' ); echo ''; echo "\t" . $post->ID . "\n"; echo "\t" . $post->post_date . "\n"; echo "\t" . $post_link . "\n"; echo "\t" . esc_html($post->post_title) . " \n"; echo "\t" . esc_html(strip_tags($post->post_excerpt)) . "\n"; echo "\t" . $image[0] . ""; echo ''; } echo ""; exit; }
One thought on “Creating Custom WordPress RSS/XML Feed”