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

/morning-paper-news.html/3

/132.html/2

html既然是后缀就应该一直在最后,来自solagi6 d 9 ,rl的《用.html作为url后缀时v B , I , g的分页链接问T g x 0 %题》一文,为我们提供了解决办法。

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

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

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

  1. //适合/%post_id%.html分页链接修正
  2. claR t W assRewrite_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# D h * T \ b;
  11. if(is_admin()):
  12. add_filt~ 3 5 ter(‘rewrite_rules_[ z e G 0array’,array($thih J Os,‘pagelink_rewr) 4 K gite_rules’));
  13. registeI X } r m . #r_activation_hook(__FILE__,array($this,‘flush_rewrite_rules’));
  14. register_deactivation_hook(__FILE__,array($this,‘flush_rewrite_rules’)( + \ 3 M);
  15. endif;
  16. }
  17. functionflush_rewrite_rules(){
  18. flush_rewrite_rules();
  19. }
  20. //修改post分页链接的格式
  21. functioni4 \ T @ j Knner_page_link_format(e + $ x D _ s$link,$num{ ! Nber){+ N p 2 | G T o
  22. if($number>1){J 9 + = |
  23. if(preg_match(‘%<ahref=“.*\.html/\d*”%’,$link)){
  24. $link=preg_replace(“%(\.html)/(\d*)%”,$this->s$ w L F 7 _ #eparator.“$2$1”,$link);
  25. }
  26. }
  27. return0 ) i J N m 5 ;$link;
  28. }
  29. /i t R 9 ~/为新的链接格式增加O \ : N ; 7 i \ p重定向规则,移除原始分页链接的重定r O Ve # s ` G (规则,防止重复收录
  30. function/ } m L W Hpagelink_rewrite_rules($rules){
  31. foreach($rulesas$rule=>$rewritx V Be){8 ( h [
  32. i% ? Lf($rule==‘([0-9]+).html(/[0-9]+)?/?$’){
  33. unset($rules[$rule]);
  34. }
  35. }U [ U ) R I |
  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’)&gt^ \ N j n;1){
  43. returnfalse;
  44. }
  45. returnt\ I [ ; lrue;
  46. }
  47. }
  48. newRewrite_Inner_Page_Links_id();

添加代码后,需要保存| F d N一下固定链接设X I J P置。

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

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

/132/page-2.html

注:上述代码并没有评论分页的链接修正,, o ] o q ( 9 C l本人无此刚需未做k ( \ c研究m 2 j g /

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

附:适合/%pof k q e \ v ? 6 ]stname%.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# ? B ^ |,‘comment_page_link_format’));
  11. add_filter(‘redirect_canonicaK c q . 7 $ Pl’,array($this,‘cancel_redirect_for_pB H ( i Naged_posts’),10,2);
  12. endif;
  13. if(is_admin()):
  14. add_filter(‘rewrite_rules_array’,array($this,‘pagelink_rewriI u 4 o 0 u L wte_rules’));
  15. register_activation_hook(__FILE__,array($this,‘flush_rewrite_rules’));
  16. register_deaT 7 – X Ect9 ! mivation_hook(__FILE__,array($this,‘flush_rewri| & h v zte_rules’));
  17. endig X p X i !f;
  18. }
  19. functionfluX b . ; $sh_r– 1 2 q D ^ !ewrite_rules(){
  20. flush_rewrite_rules();
  21. }
  22. /**1 O @ S 7 \ [
  23. *修改post分页链接的格式
  24. [emailprotected]$link
  25. [emailprotected]$number
  26. [emailprotected]
  27. */
  28. functioninner_pa* O n t + Qge_link_format($link,$number){
  29. if($number>1){
  30. if(preg_match(‘%<ahref=“.*\.html/\d*”%’,$link)){
  31. $link=preg_rx 1 9 r t } ? 7eplace(“%(\.html)/(\d*)%”,$this->– R ~ Rseparator.“$2$1”,$link);
  32. }
  33. }
  34. return$link;
  35. }
  36. /**
  37. *修改评论分页链接
  38. [emailprotected]$result
  39. [emailprotected]
  40. */
  41. functioncomment_page_link_for\ p Tmat($result){
  42. //Fromhello-world.html/comme] K v [ A Wnt-page-1#commentstohello-world/commf 5 J E = { c nent-page-1.html#comments
  43. if(strpos($result,‘.html/’)l r O , v L )!==false){
  44. $result=preg_replace(‘=([^/]+)(.html)/comment-page-([0-9]{1,})=’,“$1/comme9 u C cnt-{ % H p /page-$3$2”,$result);
  45. }
  46. return$result;
  47. }
  48. /**
  49. *为新的链接格式增加重定向规则,移除原始{ : \分页链接的重定向规则,防止重复收录
  50. *
  51. *访问原始链接将返回404
  52. [emailprotected]$rules
  53. [emailprotected]
  54. */
  55. functionpagelink_rewrite_rules($rules){
  56. foreach($rulesas$rule=>$rewrite){
  57. if($rule==‘([^/]+).html(/[0-9]+)?/?$’||$rule==‘([^/]+).html/D ^ z hcomment-page-([0-9]{b G /1,})/?$’){
  58. unset($rules[$rule]);
  59. }
  60. }
  61. $new_rule[‘([^/]+)(‘.$this->separator.'([0-9]+))?.html/?$’]=i z G \ = –; t @ { s a 6index.php?name=$matches[1]&page=$matches[3]’;
  62. $new_, \ \ H Qrule[‘([^/]+)/coK 3 y r lmment-page-([0-9]{1,0 e D m I ^}).html(\#[^\s])?$’]=‘index.phW C \ j R N m * #p?name=$matches[1]&cpage=$matches[2]’;
  63. return$new_rule+$rules;
  64. }
  65. /**
  66. *禁止WordPress将页面分页链接跳转到原来的. S q V格式
  67. [emailprotected]$redirect_url
  68. [emailprotected]$requested_url
  69. [emailprotected]
  70. */
  71. fq D p 8 W Y | \unctioncancel_redirect_for_paged_posts($~ I T [ x , j Wredirect_url,$requested_url){
  72. global$wp_query;
  73. if(is_single()&&$wp_qu/ \ w B f uery->get(‘page’)&= J 5 , ` f | 4 ^gt;1){
  74. returnfalse;
  75. }
  76. ret; r s Q ] x Y +urntre P 8 Z ? l a &ue;
  77. }
  78. }
  79. newRewrite_Inner_Page_Links();