wordpress为新的文章类型添加伪静态规则

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

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


register_post_type(...此处省略注册文章类型代码...

//修改伪静态规则
add_filter('post_type_link', 'custom_book_link', 1, 3);
function custom_book_link( $link, $post = 0 ){
    if ( $post->post_type == 'book' ){
        return home_url( 'book/' . $post->ID .'.html' );
    } else {
        return $link;
    }
}
add_action( 'init', 'custom_book_rewrites_init' );

function custom_book_rewrites_init(){
    add_rewrite_rule( 'book/([0-9]+)?.html$', 'index.php?post_type=book&p=$matches[1]', 'top' );
}

刷新伪静态规则

添加完之后,我们重新打开新加类型的文章,发现404,这是因为我们没有刷新rewite规则导致的。两种办法。

在add_rewrite_rule方法之后,添加代码:

方式一

flush_rewrite_rules();
更新伪静态规则
但是:要注意,更新伪静态规则是非常消耗时间和效率的,所以不要每次执行代码都调用,只在必要的情况调用(比如启用主题和启用插件),把 flush_rewrite_rules() 挂到 init 钩子上是极其不正确的
我们可以单独调用,如添加一个入口,单独调用此方法。

方式二

在设置->固定链接 点击一次保存,因为保存固定链接,也会触发flush_rewrite_rules()方法。两种方法均可

暂无评论

相关推荐

微信扫一扫,分享到朋友圈

wordpress为新的文章类型添加伪静态规则