Change WordPress feed <link> for one specific tag

I have an external page that reads a RSS feed for a tag. I can’t change anything on the external page, so the challenge is to change the RSS feed on my side to match the requirements.
On the external page the 3 latest posts for a tag are shown, and at the end of the section (note: not after each post but after all 3 posts) there is a “View all” link. This link receives its value from the element in the feed, which is by default set to my blog homepage, e.g. http://myblog.com). For this specific tag the link should be http://myblog.com/tag/myspecialtag.

The requirement is that the “View all” link links to the tag page instead of the homepage.

Read More

My idea was to add a condition to the element to change the URL for this specific category. I tried to change the feed template as recommended here: Customizing feeds, but for some reason it doesn’t change the template at all. The code I tried is the following:

remove_all_actions( 'do_feed_rss2' );
add_action( 'do_feed_rss2', 'change_feed_rss2', 10, 1 );

function change_feed_rss2( $for_comments ) {
    $rss_template = get_template_directory() . '/feeds/feed-custom_rss2.php';
    if( file_exists( $rss_template ) )
        load_template( $rss_template );
    else
        do_feed_rss2( $for_comments ); // Call default function
}

Of course I created the custom feed template and stored it in the feeds directory in my theme.

As this didn’t work I tried looking into filters/hooks but I couldn’t find anything helpful regarding my issue. Any ideas on how to best solve this issue?

Related posts

1 comment

  1. I came up with the following solution:
    I created a new custom page template custom_rss-feed.php and copied the code from wp-includes/feed-rss.php into it. I assigned this template to a new page. Additionally I added a filter to get_bloginfo_rss like the following:

    function alter_bloginfo_rss($value, $key) {
    
        if ( $key === "url" &&
            is_page_template("custom_rss-feed.php")
        ) {
    
            return $value . "/my/custom/url";
        }
    
        return $value;
    }
    
    add_filter("get_bloginfo_rss", "alter_bloginfo_rss", 10, 2);
    

Comments are closed.