Rewrite category slug

时间:2014-04-17 作者:Dave McCourt

我有这样一些类别:

/europe/postname
/usa/postname
出于各种原因,我想将其改写为:

/news/view/postname
我尝试了一些re-direct插件,但没有成功。这可能吗?

1 个回复
SO网友:Domain

可以通过在post_link 滤器此筛选器允许您更改最终的post链接。

由于您正在permalink中显示类别,因此我假设您的permalink结构包含%category% 在里面。

下面的代码将帮助您以想要的方式获取链接。

add_filter( \'post_link\', \'wdm_change_category_permalink_structure\', 10, 3 );

function wdm_change_category_permalink_structure( $post_link, $post, $leavename ) {

    $array_of_cats_to_be_replaced = array( \'europe\', \'usa\' ); //array of category slugs. Add more slugs here

    $get_permalink_structure = get_option( \'permalink_structure\' );

    if ( strpos( $get_permalink_structure, \'%category%\' ) !== false ) {

        $cats = get_the_category( $post->ID ); //get categories assocaited with the post

        if ( $cats ) {

            usort( $cats, \'_usort_terms_by_ID\' ); // order by ID  

            $category_object = get_term( $cats[0], \'category\' ); //Take first category

            $category = $category_object->slug; //Get slug of category

            if ( in_array( $category, $array_of_cats_to_be_replaced ) ) { //If category we want is in the array
                $rewritecode = array(
                    \'%year%\',
                    \'%monthnum%\',
                    \'%day%\',
                    \'%hour%\',
                    \'%minute%\',
                    \'%second%\',
                    $leavename ? \'\' : \'%postname%\',
                    \'%post_id%\',
                    \'%category%\',
                    \'%author%\',
                    $leavename ? \'\' : \'%pagename%\',
                );
                $rewritereplace = array(
                            $date[0],
                            $date[1],
                            $date[2],
                            $date[3],
                            $date[4],
                            $date[5],
                            $post->post_name,
                            $post->ID,
                            \'news/view\', //Replace category with news/view
                            $author,
                            $post->post_name,
                );

                $post_link = home_url( str_replace( $rewritecode, $rewritereplace, $get_permalink_structure ) );
                $post_link = user_trailingslashit( $post_link, \'single\' );
            }
        }
    }
    return $post_link;
}
希望有帮助:)

结束

相关推荐

Reslug a Custom Post Type

我为wordpress构建了一个带有自定义帖子类型的插件,在此过程中,我意识到我必须重新构建生成slug的方式。最初,我让cpt制作默认的slug,如new-post-1、new-post-2等。我意识到这很愚蠢,于是重新编写了命名约定,按照应该的方式从帖子标题创建slug。我现在唯一的问题是,我想让我在wordpress中输入的所有旧帖子都使用新的命名约定。是否有一个函数或方法可以告诉wordpress为特定的自定义帖子类型重建/重新生成slug。我找到了这个插件:http://wordpress.or