已更改CPT的固定链接结构-我应该重定向吗?

时间:2012-02-04 作者:fxfuture

下列的this answer, 我最近更改了一个名为“文学”的自定义帖子类型的permalink结构,以包含分类术语:

旧结构:mysite.com/literature/books/post_name

新结构:mysite.com/literature/fiction/post_name

然而,当访问原始的permalink时,Wordpress不会自动重定向它,两个页面在Google搜索中显示为单独的条目。

我应该重新定位旧文学吗?如果是这样,最好的方法是什么?

更新

谢谢Brian,我已经对您的代码进行了如下修改,现在一切正常:

add_action(\'parse_request\', \'redirect_books_to_fiction\', 0);
function  redirect_books_to_fiction(){
    global $wp;
    if(preg_match(\'/literature\\/books/\', $wp->request)){
        $redirect = get_bloginfo(\'siteurl\').\'/\'.str_replace(\'books\', get_the_term_list( $ID, \'literature_category\', \'\', \' / \', \'\' ), $wp->request);
        wp_redirect($redirect, 301);
        exit;
    }
}
但是,如何重定向everything 而不仅仅是“书”?

在我的文学永久链接上,我可以在线索中键入任何单词,它不会重定向。

e、 g。mysite.com/literature/any_random_word/post_name

就这样一直保持着。

然而,如果我访问我网站上的其他页面并更改任何通向帖子的线索,它会自动重定向到正确的永久链接。

e、 g.如果我改变:mysite.com/food/recipes/post_name收件人:mysite.com/a_random_word/another_random_word/post_name

它重定向到正确的永久链接。

我想这是因为我在this answer

Here is the site.

2 个回复
SO网友:Brian Fegter

我同意您需要添加重定向。使用以下函数可以轻松完成此操作。我相信你将不得不调整它,但这是一个很好的概念证明。

add_action(\'parse_request\', \'redirect_books_to_fiction\', 0);
function  redirect_books_to_fiction(){
    global $wp;
    if(preg_match_all(\'~literature\\/(.+)/(.+)?~\', $wp->request, $matches)){
        $redirect = get_bloginfo(\'siteurl\').\'/\'.str_replace(\'books\', \'fiction\', $wp->request);
        wp_redirect($redirect, 301);
        exit;
    }
}
要进一步回答有关匹配分段的问题,请执行以下操作:

add_action(\'parse_request\', \'redirect_cpts\', 0);
function  redirect_cpts(){
    $one_to_one = array(
        \'literature\' => \'books\',
        \'food\' => \'foo\',
        \'bar\' => \'food\'
    );
    $request = $_SERVER[\'REQUEST_URI\'];

    //We limit the scope of the regex to our specified CPTs so we don\'t hammer every request
    if(preg_match_all(\'~(literature|food|bar)/(.+)/(.+)?~\', $request, $matches)){
        if(!$one_to_one[$matches[1][0]])
            return;

        $post_type = $one_to_one[$matches[1][0]]; //Do proper escaping
        $post_name = $matches[3][0]; //Do proper escaping

        if($post_name && $post_type){
            global $wpdb;
            $post = $wpdb->get_row("SELECT * ID FROM $wpdb->posts WHERE post_type = \'$post_type\' AND post_name = \'$post_name\'");
            $redirect = get_permalink($post);
            if($redirect){
                wp_redirect($redirect, 301);
                exit;
            }
        }
    }
}

SO网友:cwd

我还建议查看插件Redirection 作为管理更改的URL/永久链接的好方法

结束

相关推荐

Login redirect problem

嘿,我有点奇怪的问题。。我得到了一个表单,可以根据类别和用户级别登录某些单曲。。它工作得很好,但windows(网站所在的服务器)返回的“当前页面”值错误意思这是:\'redirect\' => site_url( $_SERVER[\'REQUEST_URI\'] ), 返回:www.somewebsite。com/sub/sub/?p=100而不是:www.somewebsite。com/sub/?p=100This is the actuall form: <