0

/%postname%.htmlパーマリンクをからに変更したい/%year%/%monthnum%/%postname%.html

私はWorpdress管理パネルからそれを行う方法を知っています。しかし、20000を超える投稿があったので、古い投稿の.htacessからリダイレクトしてリダイレクトする機会があるかどうかを知りたいです/%postname%.html/%year%/%monthnum%/%postname%.html

4

1 に答える 1

1

.htaccess投稿名に基づいて実際のパーマリンクを取得する必要があるため、( とは逆に) WordPress 自体でこれを行う必要があります。

パーマリンクを新しい構造に更新し、次のコードをfunctions.phpファイルに追加してみてください。

<?php
function redirect_postname_to_date_structure($wp) {
    $pattern = '#^([^/]+)\.html$#';
    $matches = array();

    if ( preg_match( $pattern, $wp->request, $matches ) ) {
        $slug = $matches[1];

        $args = array(
            'name' => $slug,
            'post_type' => 'post',
            'post_status' => 'publish',
            'posts_per_page' => 1
        );

        // Try to retrieve post based on slug
        $posts = get_posts( $args );

        if ( $posts ) {
            $permalink = get_permalink( $posts[0]->ID );

            wp_redirect( $permalink, 301 );
            exit;
        }
    }
}
add_action( 'parse_request', 'redirect_postname_to_date_structure' );
?>

PS:最初に 302 ステータス コード ( wp_redirect()) を使用してテストすることをお勧めします。301 が機能することを確認したら、301 に切り替えることができます。

于 2013-03-13T12:26:26.953 に答える