Change WordPress Fragment Links in RSS Feeds to be Permalinks
Here's a knotty problem. Lots of my posts use URl Fragments. Those are links which start with #
. They allow me to write:
HTML
<a href="#where-is-this-a-problem>Jump to heading</a>
So when someone clicks on a link, they go straight to the relevant section. For example, they might want to skip straight to how to fix it.
Isn't that clever?
Where is this a problem?
This works great when someone is on my website. They're on the page, and a fragment links straight to the correct section of that page.
But some people view this blog in RSS & Atom feeds - and those feeds also power my newsletter.
When those people see a fragment, it is devoid of its original context. So they end up going to some random location, or my homepage.
How to fix it?
Stick this into your WordPress theme's functions.php
file:
PHP
// In the RSS feed, change #whatever to <permalink>#whatever
function rewrite_fragment_links_in_rss($content) {
global $post;
// Ensure this is a feed
if ( is_feed() && $post instanceof WP_Post ) {
// Get the permalink
$base_url = get_permalink( $post );
// Regex to get href="#
$content = preg_replace_callback(
'/href=["\']#([^"\']+)["\']/',
function ( $matches ) use ( $base_url ) {
return 'href="' . esc_url( $base_url . '#' . $matches[1] ) . '"';
},
$content
);
}
return $content;
}
// Hook into feed filters for both excerpts and full content
add_filter( "the_excerpt_rss", "rewrite_fragment_links_in_rss" );
add_filter( "the_content_feed", "rewrite_fragment_links_in_rss" );
That listens out for the RSS feed being generated and replaces #whatever
with https://shkspr.mobi/blog/2024/12/change-wordpress-fragment-links-in-rss-feeds-to-be-permalinks#whatever
Nifty!
Hopefully, if you click on the links in my emails and feeds, it should take you to the right place now.
This reading list is brought to you courtesy of Vivaldi browser who pay me a respectable salary and don’t moan when I read stuff I’m interested in. Studies show that using Vivaldi makes you even more gorgeous, by up to 879%. If Not React, Then What? – “nobody should start a new project in the […]
More comments on Mastodon.