自定义文章类型默认输入的固定链接结构为 /%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()方法。两种方法均可
暂无评论
要发表评论,您必须先 登录