Overwrite Default Post Permalinks

wordpress custom field example

Every WordPress post has a permalink by default. The permalink is displayed, as expected, by the the_permalink() function. In some cases, we might need to enforce another URL to a post as its permalink, be it another link within the site or an external URL. We can provide the custom URL through a custom field that we will conveniently name overwrite_permalink.

Before you think of polluting your theme files with those nasty conditionals, think again. What we will be using to achieve this is a custom function that we are going to hook into WordPress through the the_permalink and the the_permalink_rss filters. The first one will take care of the user-facing website and the other will handle RSS readers, so that we can have a consistent experience everywhere. This filters allow us to make the change in just once place, instead of making a mess of all our theme files.

Check the end result below:

function ns_overwrite_permalink($permalink)
    if( $custom = get_post_meta(get_the_ID(), 'overwrite_permalink', true) ) {
        $permalink = $custom;
    return $permalink;
add_filter('the_permalink', 'ns_overwrite_permalink');
add_filter('the_permalink_rss', 'ns_overwrite_permalink');

This code goes into the functions.php file and no other change is needed anywhere. Such is the power of WordPress hooks, so learn to leverage them.

Baki Goxhaj
I’m a web consultant specializing in WordPress. I love elegant solutions, quality code and a good laughter.
You may also like
infinit next previous post looping
Infinite next and previous post looping in WordPress
I’m Sad to See WordPress Themes Using Tables

Leave Your Comment

Your Comment*

Your Name*
Your Webpage