WordPress: template_redirect
December 2nd, 2008
include(dirname(__FILE__).'/stub-tags-categories.php'); ?>
Before I upgraded to wordpress 2.6, I had URLs using tags like this:
http://chadnorwood.com/tag/travel/
After I upgraded I realized I liked categories better (they can have parent categories). So no more tags, all categories, but the problem was that google (and others) still link to /tag/travel/ which ended on a 404 page. Since I had no tags, I decided to redirect all my /tag/xxxx to /cat/xxxx – I also prefer /cat/xxx to /category/xxx, which I changed in Settings-Permalinks. Here’s how I did the redirect exactly:
Add the following to the end of ../wp-content/themes/<current_theme>/functions.php file
// added at the end of functions.php file, in my current theme's directory add_action ('template_redirect', 'check_for_tag_404'); // custom function to redirect old tag links to new cat links function check_for_tag_404() { $pat = '/^\/tag\/(.*)$/'; // return if this URL does not begin with "/tag/" if (!preg_match( $pat, $_SERVER["REQUEST_URI"])) return; $uri = $_SERVER["REQUEST_URI"]; $uri = preg_replace( $pat, '/cat/$1', $uri); $location = "http://" . $_SERVER["HTTP_HOST"] . $uri; header("Location: $location"); exit; }
Big Ups to this template_redirect dude for giving me a clue.