从/%postname%.html重定向301到/%year%/%monthnum%/%postname%.html

时间:2013-03-07 09:28:12

标签: wordpress .htaccess redirect permalinks

我想将永久链接从/%postname%.html更改为/%year%/%monthnum%/%postname%.html

我知道如何从Worpdress管理面板中执行此操作。但是我发帖超过20000,所以我想知道是否有机会从.htacess重定向我的帖子,/%postname%.html重定向到/%year%/%monthnum%/%postname%.html

1 个答案:

答案 0 :(得分:1)

你应该在WordPress本身(与.htaccess相矛盾)这样做,因为你必须根据帖子名称获取真正的永久链接。

请尝试将固定链接更新为新结构,并将以下代码添加到 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.