Custom RSS Template for WordPress

Custom RSS Template for WordPress

Creating a custom RSS template is pretty easy. I’ll show you have to do it in 3 steps.

1) Register the template

Place the following into functions.php

<?php
add_action( 'after_setup_theme', 'my_rss_template' );
/**
 * Register custom RSS template.
 */
function my_rss_template() {
    add_feed( 'short', 'my_custom_rss_render' );
}

/**
 * Custom RSS template callback.
 */
function my_custom_rss_render() {
    get_template_part( 'feed', 'short' );
}

2) Create the template file

Create a new file named, feed-short.php and place it inside your theme’s directory

<?php
/**
 * Customs RSS template with related posts.
 * 
 * Place this file in your theme's directory.
 *
 * @package sometheme
 * @subpackage theme
 */

/**
 * Get related posts.
 */
function my_rss_related() {
    global $post;

    // Setup post data
    $pid     = $post->ID;
    $tags    = wp_get_post_tags( $pid );
    $tag_ids = array();

    // Loop through post tags
    foreach ( $tags as $individual_tag ) {
        $tag_ids[] = $individual_tag->term_id;
    }

    // Execute WP_Query
    $related_by_tag = new WP_Query( array(
        'tag__in'          => $tag_ids,
	'post__not_in'     => array( $pid ),
	'posts_per_page'   => 3,
    ) );

    // Loop through posts and build HTML
    if ( $related_by_tag->have_posts() ) :
        echo 'Related:<br />';
	while ( $related_by_tag->have_posts() ) : $related_by_tag->the_post();
	    echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a><br />';
	endwhile;
    else :
	echo '';
    endif;
    wp_reset_postdata();
}

/**
 * Feed defaults.
 */
header( 'Content-Type: ' . feed_content_type( 'rss-http' ) . '; charset=' . get_option( 'blog_charset' ), true );
$frequency  = 1;        // Default '1'. The frequency of RSS updates within the update period.
$duration   = 'hourly'; // Default 'hourly'. Accepts 'hourly', 'daily', 'weekly', 'monthly', 'yearly'.
$postlink   = '<br /><a href="' . get_permalink() . '">See the rest of the story at mysite.com</a><br /><br />';
$postimages = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'large' );

// Check for images
if ( $postimages ) {
    // Get featured image
    $postimage = $postimages[0];
} else {
    // Fallback to a default
    $postimage = get_stylesheet_directory_uri() . '/images/default.jpg';
}

/**
 * Start RSS feed.
 */
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' ); ?>
>
<!-- RSS feed defaults -->
<channel>
    <title><?php bloginfo_rss( 'name' ); wp_title_rss(); ?></title>
    <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 bloginfo_rss( 'language' ); ?></language>
    <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', $duration ); ?></sy:updatePeriod>
    <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', $frequency ); ?></sy:updateFrequency>
    <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
    <!-- Feed Logo (optional) -->
    <image>
        <url>http://mysite.com/somelogo.png</url>
	<title>
	    <?php bloginfo_rss( 'description' ) ?>
	</title>
	<link><?php bloginfo_rss( 'url' ) ?></link>
    </image>
    <?php do_action( 'rss2_head' ); ?>
    <!-- Start loop -->
    <?php while( have_posts()) : the_post(); ?>
    <item>
        <title><?php the_title_rss(); ?></title>
	<link><?php the_permalink_rss(); ?></link>
	<guid isPermaLink="false"><?php the_guid(); ?></guid>
	<author><?php the_author(); ?></author>
	<image>
	    <url><?php echo esc_url( $postimage ); ?>"/></url>
	</image>
	<pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false ); ?></pubDate>
	<content:encoded>
	    <![CDATA[<?php echo the_excerpt_rss(); echo $postlink; echo my_rss_related(); ?>]]>
	</content:encoded>
    </item>
    <?php endwhile; ?>
</channel>
</rss>

Now your custom RSS feed can be found at
http://yoursite.com?feed=short


Jayesh Patel
Author
Jayesh Patel

Jayesh Patel is a Professional Web Developer & Designer and the Founder of InCreativeWeb.

As a highly Creative Web/Graphic/UI Designer - Front End / PHP / WordPress / Shopify Developer, with 14+ years of experience, he also provide complete solution from SEO to Digital Marketing. The passion he has for his work, his dedication, and ability to make quick, decisive decisions set him apart from the rest.

His first priority is to create a website with Complete SEO + Speed Up + WordPress Security Code of standards.



Explore

Related Articles

23rd November, 2024

How Custom WordPress Websites Drive Business Success?

21st November, 2024

Advantages of Business Web Development

18th November, 2024

How to delete your cache and force a browser refresh?

16th November, 2024

How to Manage Website Technical Debt for Long-Term Success?