目录
首页 笔记 详情

WordPress自定义模型的固定链接url用别名html后缀


自定义文章类型默认输入的固定链接结构为 /%postname% 。假设我们添加的自定义文章类型为 book ,那么默认输出的 book 文章链接一般为 http://域名/book/slug (slug为标题别名)。如果文章标题是中文(比如:一本好书),而且你没有手动或者使用插件翻译为非中文的 slug (a-nice-book),那么显示的链接就会是 http://域名/book/一本好书 ,这样一来,文章链接的中文部分就会显示成乱码,实在不符合我们的审美标准了。

那么,我们可以将 /%postname% 改为 /%post_id% 或 /%postname%.html 样式,使用ID来显示。要实现这个目的,可以使用文章开头提到的 Custom Post Type Permalinks 插件。如果你是插件或主题开发者,一般都喜欢直接通过代码定义好默认的固定链接结构。

可以在插件函数文件或主题的functions.php 文件添加下面的代码:

//When your create a custom post type change your rewrite to:
'rewrite' => array('slug' => 'courses/%course_category%')

//Then filter post_type_link to insert the category of selected course into the permalink:
function wpa_course_post_link( $post_link, $id = 0 ){
    $post = get_post($id);
    if ( is_object( $post ) ){
        $terms = wp_get_object_terms( $post->ID, 'course_category' );
        if( $terms ){
            $post_link = str_replace( '%course_category%' , $terms[0]->slug , $post_link );
            //and add the .html extension to the returned post link:
            return $post_link . '.html';
        }
    }
    return $post_link;  
}
add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );

//Then create the rewrite rules for the post-type/post-category/post-name.html permalink structure:
add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    $new_rules[ 'courses/([^/]+)/(.+)\.html$' ] = 'index.php?courses=$matches[2]';
    return $new_rules + $rules;
}

以上代码就可以输出形如 /book/wp-url.html 的链接。请将代码中所有 book 替换为你的自定义文章类型。


写笔记

咨询

您的电子邮箱地址不会被公开。 必填项已用*标注