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

人生不过三万天,成功失败均坦然,是非恩怨莫在意,健康快乐最值钱。你的爱好就是你的方向,你的兴趣就是你的资本。

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

  • /morning-paper-news.html/3
  • /132.html/2

html既然是后缀就应该一直在最后,来自solagirl的《用.html作为url后缀时的分页链接问题》一文,为我们提供了解决办法。不过原代码只提供了/%postname%.html的修改方法,本文就补充完善一下,提供一下/%post_id%.html的修改方法。具体做法也很简单,只需要将以下代码添加到当前主题 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('%<arel="nofollow noopener noreferrer" href=".*\.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插件查看链接正则写法并修改上述代码。

上述代码会与《如何实现WordPress分类目录和页面链接地址以斜杠/结尾》代码冲突,解决办法有待研究。
附:/%postname%.html 链接形式的原代码

本文修正WordPress设置伪静态后文章分页链接问题到此结束。每条路都很难走,可是一旦选择了,就必须要走下去。小编再次感谢大家对我们的支持!

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

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

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

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

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