1
votes

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.

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?

1

1 Answers

1
votes

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);