7

I made a site some time ago and after some days some posts were indexed by search engines. Today I changed the permalink structure from /%postname%/ to /%category%/%postname%/.

After that, when people come to my site from search engines a 404 page not found error appears. I want to change all old URLs to the new category base URL without any 404 error.

How can I do it?
By the way, I use Yoast plugin.

1
  • Have you tried flushing your rewrite rules? Apr 5, 2013 at 0:50

2 Answers 2

7

That happens because WordPress reads your old post name as category name now - and it cannot find that category.

Solution: filter 404_template and try to find the post and its permalink. Then redirect.

<?php  # -*- coding: utf-8 -*-
/* Plugin Name: Redirect to category */

add_filter( '404_template', 't5_redirect_to_category' );

function t5_redirect_to_category( $template )
{
    if ( ! is_404() )
        return $template;

    global $wp_rewrite, $wp_query;

    if ( '/%category%/%postname%/' !== $wp_rewrite->permalink_structure )
        return $template;

    if ( ! $post = get_page_by_path( $wp_query->query['category_name'], OBJECT, 'post' ) )
        return $template;

    $permalink = get_permalink( $post->ID );

    wp_redirect( $permalink, 301 );
    exit;
}
3
  • Thank you for sharing this, it just saved me so much time writing 301 redirects! Feb 28, 2014 at 16:19
  • hi, where to add the above function? separate file? or inside functions.php? I am using genesis theme.
    – JDesigns
    Apr 27, 2015 at 19:15
  • @Jay A separate plugin. This is why the code includes a plugin header. :)
    – fuxia
    Apr 27, 2015 at 22:12
0

You need to add 301 redirects from your old page urls to the new ones.

This plugin should accomplish what you want: http://wordpress.org/extend/plugins/redirection/

Because it detects changes to your permalinks and automatically adds redirects, you will need to switch back to your old permalink structure, activate the plugin, and then update your permalinks to the new structure.

Hope this helps.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.