web-dev-qa-db-ja.com

パーマリンク構造を/%postname%/から/%category%/%postname%/に変更して404をキャッチ

私はしばらく前にサイトを作成し、数日後にいくつかの投稿が検索エンジンによってインデックスされました。今日、私はパーマリンク構造を/%postname%/から/%category%/%postname%/に変更しました。

その後、人々が検索エンジンから私のサイトにやって来ると、404 page not found errorが表示されます。 404エラーを発生させることなく、すべての古いURLを新しいカテゴリベースのURLに変更します。

どうすればいいの?
ところで、私はYoastプラグインを使っています。

7
prashant

これは、WordPressが古い投稿名をカテゴリ名として読み取るようになったために起こります - そしてそのカテゴリを見つけることができません。

解決策:404_templateをフィルタリングし、投稿とそのパーマリンクを見つけようとします。その後リダイレクトします。

<?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;
}
7
fuxia

古いページのURLから新しいものに301個のリダイレクトを追加する必要があります。

このプラグインはあなたが望むものを達成するはずです: http://wordpress.org/extend/plugins/redirection/ /

パーマリンクの変更を検出して自動的にリダイレクトを追加するので、古いパーマリンク構造に戻ってプラグインを有効にしてから、パーマリンクを新しい構造に更新する必要があります。

お役に立てれば。

0
Griffin