纯代码如何实现WordPress自定义文章类型的固定链接结构

家乡的夜景,小小的月牙儿挂在湛蓝湛蓝的天空上,把淡淡的光洒在军舰上,军舰就像披上了一件银白色的棉袄,海面上波光粼粼,海浪轻轻地拍打着礁石,像一位母亲在抚摸着孩子的小脚丫。

Boke112 导航的博客目录就是用 WordPress 的自定义文章类型来实现(PS:如果前期早点明白,将不会用自定义文章类型,而是直接用默认的文章类型类建立不同的分类实现),至于 WordPress 自定义文章类型的固定链接设置问题,上一次已经分享过用插件实现,具体请移步《自定义文章类型固定链接设置插件:Custom Post Type Permalinks》,今天分享的是纯代码实现。

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

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

具体实现办法如下:

一、只有一个自定义文章类型的情况

1、直接将以下代码添加到主题的 functions.php 文件最后一个?>前面。

  1. /**
  2. *设置book这种自定义文章类型的固定链接结构为ID.html
  3. *https://www.wpdaxue.com/custom-post-type-permalink-code.html
  4. */
  5. add_filter('post_type_link','custom_book_link',1,3);
  6. functioncustom_book_link($link,$post=0){
  7. if($post->post_type=='book'){
  8. returnhome_url('book/'.$post->ID.'.html');
  9. }else{
  10. return$link;
  11. }
  12. }
  13. add_action('init','custom_book_rewrites_init');
  14. functioncustom_book_rewrites_init(){
  15. add_rewrite_rule(
  16. 'book/([0-9]+)?.html$',
  17. 'index.php?post_type=book&p=$matches[1]',
  18. 'top');
  19. add_rewrite_rule(
  20. 'book/([0-9]+)?.html/comment-page-([0-9]{1,})$',
  21. 'index.php?post_type=book&p=$matches[1]&cpage=$matches[2]',
  22. 'top'
  23. );
  24. }

2、将以上代码中的 book 全部改为自己设置的自定义文章类型(如 bkml),即可实现 WordPress 自定义文章类型的固定链接为 http://域名/ bkml / ID.html。

温馨提示:以上代码中的 book/可以去掉变成 http://域名/ ID.html 这样的链接结构,也可以更改 book/为 a/,那么固定链接 http://域名/ book/ ID.html 也将会改为 http://域名/ a/ ID.html,而自定义文章类型没有变化。还有最后一点,在更改后记得在后台点击一次“设置”》“固定链接”,要不然会出现 404 错误哦。

二、有多个自定义文章类型的情况

方法是一样的,只需要将以下代码添加到主题的 functions.php 文件最后一个?>前面。

  1. /**
  2. *设置多种自定义文章类型的固定链接结构为ID.html
  3. *https://www.wpdaxue.com/custom-post-type-permalink-code.html
  4. */
  5. $mytypes=array(//根据需要添加你的自定义文章类型
  6. 'type1'=>'slug1',
  7. 'type2'=>'slug2',
  8. 'type3'=>'slug3'
  9. );
  10. add_filter('post_type_link','my_custom_post_type_link',1,3);
  11. functionmy_custom_post_type_link($link,$post=0){
  12. global$mytypes;
  13. if(in_array($post->post_type,array_keys($mytypes))){
  14. returnhome_url($mytypes[$post->post_type].'/'.$post->ID.'.html');
  15. }else{
  16. return$link;
  17. }
  18. }
  19. add_action('init','my_custom_post_type_rewrites_init');
  20. functionmy_custom_post_type_rewrites_init(){
  21. global$mytypes;
  22. foreach($mytypesas$k=>$v){
  23. add_rewrite_rule(
  24. $v.'/([0-9]+)?.html$',
  25. 'index.php?post_type='.$k.'&p=$matches[1]',
  26. 'top'
  27. );
  28. add_rewrite_rule(
  29. $v.'/([0-9]+)?.html/comment-page-([0-9]{1,})$',
  30. 'index.php?post_type='.$k.'&p=$matches[1]&cpage=$matches[2]',
  31. 'top'
  32. );
  33. }
  34. }

其中代码中的 type1、type2、type3 就是我们的自定义文章类型,slug1、slug2、slug3 就是自定义文章类型固定链接的类型地址。如 type1 改为 book,那么 slug1 可以改为 bkml,链接结构就是 http://域名/ bkml/ ID.html;也可以改为 a,链接地址就是 http://域名/ a/ ID.html。

文中技术及代码来源自WordPress 大学

以上就是纯代码如何实现WordPress自定义文章类型的固定链接结构。幸福只有一种,不幸各有各的不幸;简单只有一种,复杂各有各的复杂;放下只有一种,记得各有各的记得;宽容只有一种,生气各有各的生气;知足只有一种,不满各有各的不满;信任只有一种,怀疑各有各的怀疑;适合只有一种,不适各有各的不适;成功只有一种,失败各有各的失败;转播都是好人,不转各有各的原因。更多关于纯代码如何实现WordPress自定义文章类型的固定链接结构请关注haodaima.com其它相关文章!

您可能有感兴趣的文章
WordPress站点Gravatar头像前后台不显示的如何解决办法

WordPress做公司官网好吗?会不会显得档次很低?

WordPress主题需要支持https吗?WordPress站点如何如何实现https?

WordPress站点的页面/标签/分类URL地址如何添加.html?

WordPress站点更换了域名后数据库应该如何操作替换新旧域名?