This was originally posted on ClearSkys.net, but it seems that Barry is going to be shutting down the site. So, that it lives on, I am posting it here. Of note, this is the plugin that I had in mind when I designed that Daring Inspiration WordPress theme.
Any visitors, or subscribers, to John Grubers’ Daring Fireball blog will notice how he uses the post titles as direct links to the sites and information that he refers to within the posts body.
Earlier today WP Recipes posted a quick tutorial on how to set this up on your site (based on work by Vlad Grubman) by adding some code to your themes functions.php file and then changing all the permalink calls within the theme to use the new permalink code instead of the standard WordPress loop function the_permalink().
Whilst this is a perfectly workable solution, it is dependent on modifying your themes functions.php file and all of the pages that include the WordPress loop every time you switch themes (which if you are anything like me, is quite often).
I have modified the code into a small plugin, that when activated, will replace the standard permalink with an external URL without any need to modify your sites theme. I’ve also added an extra filter so that it will replace the permalinks within your RSS feed as well.
The code for the plugin can be found below, and can be downloaded from here: Eternal Permalink. To install, just change the .txt to .php and upload to wp-content/plugins.
`
<?php
/*
Plugin Name: Enable External Permalinks
Plugin URI: http://jakespurlock.com/2009/09/how-to-point-your-post-permalink-to-an-external-site/
Description: This plugin will allow you to change the post permalink for your posts/pages to an external sites URL
Author: Barry at clearskys.net
Version: 0.1
Author URI: http://blog.clearskys.net/
*/
function cs_external_permalink($permalink) {
global $post;
$thePostID = $post->ID;
$post_id = get_post($thePostID);
$title = $post_id->post_title;
$post_keys = array(); $post_val = array();
$post_keys = get_post_custom_keys($thePostID);
if (!empty($post_keys)) {
foreach ($post_keys as $pkey) {
if ($pkey=='url1' || $pkey=='title_url' || $pkey=='url_title' || $pkey=='external') {
$post_val = get_post_custom_values($pkey);
}
}
if (empty($post_val)) {
$link = $permalink;
} else {
$link = $post_val[0];
}
} else {
$link = $permalink;
}
return $link;
}
add_filter('the_permalink','cs_external_permalink');
add_filter('the_permalink_rss','cs_external_permalink');
?>
`
To switch a post from using the standard permalink to an external one, you simply add a custom field to the post with a key of url1, title_url, url_title or external. The value of the custom field should be the complete URL you want to link to (including http:// ).





Very cool plugin and one I have looked for in the past (which is why this page now resides in my delicious bookmarks =) ). I am assuming this plugin also works for pages and not just posts, right? If so, this is a function that should be considered for the wordpress core! Thanks for your work on this!
yes cool but in my case is only half the answer.
I have blog with posts from RSS feed–they change every hour or so, but am not getting urls for some reason–your plug in would help with individual posts but am not sure if it would work with rssposts
Pingback: Top 60 incredibly useful WordPress plugins to power up your blog | Garmahis
Pingback: wp_testes – Mastic » enable extrnal permalinks
Pingback: Designers' HQ » Top 60 incredibly useful WordPress plugins to power up your blog
Pingback: The Ultimate Hacker
Hi Jake,
This is exactly what I was looking for . Im working on a friends site and trying to add this. I have enabled the plugin but cannot work out how to customize a permalink on the post to use an external one.
can you give an example of a link that was default, and what you entered to make your plugin work?
We are using simplefolio , and perhaps this is causing complications.
any help would be fantastic
thanks!
Nela
It is just as simple as adding a custom field called external as the key, and the URL for post as the ID. So example:
external
http://google.com
This would like the post URL to Google.