修正WordPress 设置伪静态后文章分页链接

2017年10月28日15:06:32 91 5,340

我们通常将WordPress固定链接设为/%postname%.html或者/%post_id%.html,可以让页面看起来像静态页,但当文章有分页时,分页链接会变得奇怪,比如:

/morning-paper-news.html/3

/132.html/2

html既然是后缀就应该一直在最后,来自solagirl的《用.html作为url后缀时的分页链接问题》一文,为我们提供了解决办法。

不过原代码只提供了/%postname%.html的修改方法。

本文提供一下/%post_id%.html的修改方法。

修正WordPress 设置伪静态后文章分页链接

将下面代码添加到当前主题 functions.php中:

  1. //适合/%post_id%.html分页链接修正
  2. classRewrite_Inner_Page_Links_id{
  3. var$separator;
  4. function__construct(){
  5. $this->separator='/page-';
  6. if(!is_admin()||defined('DOING_AJAX')):
  7. add_filter('wp_link_pages_link',array($this,'inner_page_link_format'),10,2);
  8. add_filter('get_comments_pagenum_link',array($this,'comment_page_link_format'));
  9. add_filter('redirect_canonical',array($this,'cancel_redirect_for_paged_posts'),10,2);
  10. endif;
  11. if(is_admin()):
  12. add_filter('rewrite_rules_array',array($this,'pagelink_rewrite_rules'));
  13. register_activation_hook(__FILE__,array($this,'flush_rewrite_rules'));
  14. register_deactivation_hook(__FILE__,array($this,'flush_rewrite_rules'));
  15. endif;
  16. }
  17. functionflush_rewrite_rules(){
  18. flush_rewrite_rules();
  19. }
  20. //修改post分页链接的格式
  21. functioninner_page_link_format($link,$number){
  22. if($number>1){
  23. if(preg_match('%<ahref=".*\.html/\d*"%',$link)){
  24. $link=preg_replace("%(\.html)/(\d*)%",$this->separator."$2$1",$link);
  25. }
  26. }
  27. return$link;
  28. }
  29. //为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
  30. functionpagelink_rewrite_rules($rules){
  31. foreach($rulesas$rule=>$rewrite){
  32. if($rule=='([0-9]+).html(/[0-9]+)?/?$'){
  33. unset($rules[$rule]);
  34. }
  35. }
  36. $new_rule['([0-9]+)('.$this->separator.'([0-9]+))?.html/?$']='index.php?p=$matches[1]&page=$matches[3]';
  37. return$new_rule+$rules;
  38. }
  39. //禁止WordPress将页面分页链接跳转到原来的格式
  40. functioncancel_redirect_for_paged_posts($redirect_url,$requested_url){
  41. global$wp_query;
  42. if(is_single()&&$wp_query->get('page')>1){
  43. returnfalse;
  44. }
  45. returntrue;
  46. }
  47. }
  48. newRewrite_Inner_Page_Links_id();

添加代码后,需要保存一下固定链接设置。

之后再次打开文章分页链接,会变成类似的:

/morning-paper-news/page-2.html

/132/page-2.html

注:上述代码并没有评论分页的链接修正,本人无此刚需未做研究。

其它固定链接形式,需要安装rewrite rules inspector插件查看链接正则写法并修改上述代码。

附:适合/%postname%.html链接形式原代码:展开

  1. /*
  2. *修复.html分页链接
  3. */
  4. classRewrite_Inner_Page_Links{
  5. var$separator;
  6. function__construct(){
  7. $this->separator='/page-';
  8. if(!is_admin()||defined('DOING_AJAX')):
  9. add_filter('wp_link_pages_link',array($this,'inner_page_link_format'),10,2);//forinnerpages
  10. add_filter('get_comments_pagenum_link',array($this,'comment_page_link_format'));
  11. add_filter('redirect_canonical',array($this,'cancel_redirect_for_paged_posts'),10,2);
  12. endif;
  13. if(is_admin()):
  14. add_filter('rewrite_rules_array',array($this,'pagelink_rewrite_rules'));
  15. register_activation_hook(__FILE__,array($this,'flush_rewrite_rules'));
  16. register_deactivation_hook(__FILE__,array($this,'flush_rewrite_rules'));
  17. endif;
  18. }
  19. functionflush_rewrite_rules(){
  20. flush_rewrite_rules();
  21. }
  22. /**
  23. *修改post分页链接的格式
  24. *@paramstring$link
  25. *@paramint$number
  26. *@returnstring
  27. */
  28. functioninner_page_link_format($link,$number){
  29. if($number>1){
  30. if(preg_match('%<ahref=".*\.html/\d*"%',$link)){
  31. $link=preg_replace("%(\.html)/(\d*)%",$this->separator."$2$1",$link);
  32. }
  33. }
  34. return$link;
  35. }
  36. /**
  37. *修改评论分页链接
  38. *@paramstring$result
  39. *@returnstring
  40. */
  41. functioncomment_page_link_format($result){
  42. //Fromhello-world.html/comment-page-1#commentstohello-world/comment-page-1.html#comments
  43. if(strpos($result,'.html/')!==false){
  44. $result=preg_replace('=([^/]+)(.html)/comment-page-([0-9]{1,})=',"$1/comment-page-$3$2",$result);
  45. }
  46. return$result;
  47. }
  48. /**
  49. *为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
  50. *
  51. *访问原始链接将返回404
  52. *@paramarray$rules
  53. *@returnarray
  54. */
  55. functionpagelink_rewrite_rules($rules){
  56. foreach($rulesas$rule=>$rewrite){
  57. if($rule=='([^/]+).html(/[0-9]+)?/?$'||$rule=='([^/]+).html/comment-page-([0-9]{1,})/?$'){
  58. unset($rules[$rule]);
  59. }
  60. }
  61. $new_rule['([^/]+)('.$this->separator.'([0-9]+))?.html/?$']='index.php?name=$matches[1]&page=$matches[3]';
  62. $new_rule['([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$']='index.php?name=$matches[1]&cpage=$matches[2]';
  63. return$new_rule+$rules;
  64. }
  65. /**
  66. *禁止WordPress将页面分页链接跳转到原来的格式
  67. *@paramstring$redirect_url
  68. *@paramstring$requested_url
  69. *@returnbool
  70. */
  71. functioncancel_redirect_for_paged_posts($redirect_url,$requested_url){
  72. global$wp_query;
  73. if(is_single()&&$wp_query->get('page')>1){
  74. returnfalse;
  75. }
  76. returntrue;
  77. }
  78. }
  79. newRewrite_Inner_Page_Links();

上述代码会与No category parents插件冲突,解决办法:

此处为隐藏的内容!
发表评论并刷新,才能查看

 

weinxin
我的微信
分享交流WordPress经验与技巧,关注前端设计与网站制作。仅用于功能演示。
Begin主题购买
Begin主题购买

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:91   其中:访客  89   博主  2

    • magicboy8040 0

      看看怎么样

      • xiaole1860 1

        我要了

        • Mr_qiang 0

          学习了!

          • magicboy804 0

            看看怎么样

            • 是的发表 0

              对方对方的回到天堂

              • 皮裤控 0

                感谢楼主分享

                • 44444 0

                  啊大苏打阿达

                  • jojo 0

                    不行啊,伪静态后在iis里面没发搞

                    • mageci 0

                      试试怎么样

                      • fsdfg 0

                        看看怎么样

                        • 技术宅 2

                          看看怎么样

                          • 苏州美缝剂 1

                            看看,挺不错的

                            • 黑苹果 1

                              谢谢分享!!!

                              • michan 2

                                大神,请问国外主题可以在Portfolio详情页后面加上html吗?

                                • 4151512654 0

                                  看看怎么样

                                  • lailailai 0

                                    怎么不显示呢

                                    • 子金之鑫 1

                                      学习了

                                      • 汽车销售员之家 0

                                        学习一下

                                        • jackjz 0

                                          看看怎么样

                                          • 米扑博客 2

                                            学习了,今晚试试,感谢大佬分享 :oops:

                                            • 会飞的不只是风筝 0

                                              不错。。。。

                                              • 0

                                                学习一下

                                                • 太多的理由 0

                                                  太好的文章

                                                  • 丁春华博客 1

                                                    正疑惑这个问题呢,感谢~~

                                                    • 堆爱博客 2

                                                      看看是不是

                                                      • hezuyang 0

                                                        看看怎么解决

                                                        • cjkl 0

                                                          看看

                                                          • vyni 0

                                                            看看怎么样

                                                            • Leo 0

                                                              感谢楼主分享

                                                              • HAHA 0

                                                                感谢分享

                                                                • 的第三方第三方 0

                                                                  第三方打分大师傅似的发的

                                                                  • aa 0

                                                                    /%category%/%post_id%.html 这个分页代码怎么修改啊