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.

  • Have you tried flushing your rewrite rules? – Manny Fleurmond Apr 5 '13 at 0:50
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;
}
  • Thank you for sharing this, it just saved me so much time writing 301 redirects! – Zach Russell Feb 28 '14 at 16:19
  • hi, where to add the above function? separate file? or inside functions.php? I am using genesis theme. – JDesigns Apr 27 '15 at 19:15
  • @Jay A separate plugin. This is why the code includes a plugin header. :) – fuxia Apr 27 '15 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, privacy policy and cookie policy

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