Skip to content

Instantly share code, notes, and snippets.

@mathetos
Last active October 22, 2020 17:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mathetos/150f8d969b7c9e8dcacc to your computer and use it in GitHub Desktop.
Save mathetos/150f8d969b7c9e8dcacc to your computer and use it in GitHub Desktop.
WordPress Custom RSS Feed with Offset
<?php
/**
* RSS2 Feed Template for displaying RSS2 Posts feed.
* Adds an offset of "1" to display all but most recent
* Full details at: https://wordimpress.com/anatomy-advanced-wordpress-blog-notification-email
* @package WordPress
*/
header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
$more = 1;
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
/**
* Fires between the <xml> and <rss> tags in a feed.
*
* @since 4.0.0
*
* @param string $context Type of feed. Possible values include 'rss2', 'rss2-comments',
* 'rdf', 'atom', and 'atom-comments'.
*/
do_action( 'rss_tag_pre', 'rss2' );
?>
<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
/**
* Fires at the end of the RSS root to add namespaces.
*
* @since 2.0.0
*/
do_action( 'rss2_ns' );
?>
>
<channel>
<title><?php bloginfo_rss('name'); wp_title_rss(); ?></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 bloginfo_rss( 'language' ); ?></language>
<?php
$duration = 'hourly';
/**
* Filter how often to update the RSS feed.
*
* @since 2.1.0
*
* @param string $duration The update period.
* Default 'hourly'. Accepts 'hourly', 'daily', 'weekly', 'monthly', 'yearly'.
*/
?>
<sy:updatePeriod><?php echo apply_filters( 'rss_update_period', $duration ); ?></sy:updatePeriod>
<?php
$frequency = '1';
/**
* Filter the RSS update frequency.
*
* @since 2.1.0
*
* @param string $frequency An integer passed as a string representing the frequency
* of RSS updates within the update period. Default '1'.
*/
?>
<sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', $frequency ); ?></sy:updateFrequency>
<?php
/**
* Fires at the end of the RSS2 Feed Header.
*
* @since 2.0.0
*/
do_action( 'rss2_head');
query_posts('offset=1');
while( have_posts()) : the_post();
?>
<item>
<title><?php the_title_rss() ?></title>
<link><?php the_permalink_rss() ?></link>
<comments><?php comments_link_feed(); ?></comments>
<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><![CDATA[<?php the_author() ?>]]></dc:creator>
<?php the_category_rss('rss2') ?>
<guid isPermaLink="false"><?php the_guid(); ?></guid>
<description><![CDATA[<?php strip_tags(the_excerpt()); ?>]]></description>
<content:encoded><![CDATA[<?php strip_tags(the_excerpt()); ?>]]></content:encoded>
<?php rss_enclosure(); ?>
<?php
/**
* Fires at the end of each RSS2 feed item.
*
* @since 2.0.0
*/
do_action( 'rss2_item' );
?>
</item>
<?php endwhile; ?>
</channel>
</rss>
@seezee
Copy link

seezee commented Jul 5, 2019

EDIT: Someone recently contacted me wanting to see my version of this code. So I've created a Gist at https://gist.github.com/seezee/606b015926643d861918407a31f04756.

Line 10 overrides a Wordpress global. Not only is that bad, but I'm also not even sure if it's necessary. Your code seems to work fine without it.

You should also consider using WP_Query instead of query_posts (line 79). Hit me up if you want to see my code for implementing this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment