WordPress分页伪静态加html后缀的实例内容

  • 时间:
  • 9775人关注

本文给大家分享的是在使用WordPress的过程中,发现其内容页分页的形式非常的不友好,于是就动手进行修改的过程以及详细代码,非常的实用,推荐给大家。,另外这篇文章主要知识点是关于WordPress分页、伪静态、WordPress的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

教程详情电子资料
  • 教程类别:WordPress
  • 编辑整理:广正奇
  • 教程字数:2705字节
  • 阅读时间:大概20分钟
  • 下载本教程(DOC版)
  • 问题

    当文章有分页的时候,WordPress生成的永久链接是page.html/2的形式,前面一段是文章的$link,后面的数字代表分页$number。那么问题来了,挖掘……不对,从逻辑上讲这到底是个html文件还是一个目录呢?

    难看

    在.html这个静态文件后面加上一个/和数字简直令人摸不着头脑,这还只是其次,重要的是,我发现搜索引擎根本不收录这样奇怪的链接,这个真是无法接受,我写的东西首尾都很重要,不能因为分个页就被忽视了。

    不收录

    拿这篇文章来看,搜索文章第一页的内容,谷歌收录了:

    搜索文章第二页和第三页的内容,根本没有收录:

    解决方案

    于是我决定DIY WordPress的链接生成与解析规则。

    思路

    利用filter wp_link_pages_link 将分页链接/123456重写为page-[123456].html。

    利用WordPress或者服务器的RewriteRule将page-[123456].html还原为/123456

    添加钩子redirect_canonical,防止WordPress从page-[123456].html到/123456的强行跳转。

    生成分页html后缀链接

    给WordPress主题加入:

    class Rewrite_Inner_Page_Links
    {
      var $separator;
      var $post_rule;
     
      function __construct()
      {
        $this->separator = '/page-';
        // (.+?)/([^/]+).html(/[0-9]+)?/?
        $this->post_rule = '(.+?)/([^/]+)(' . $this->separator . '([0-9]+))+.html/?$';
        if (!is_admin() || defined('DOING_AJAX')) :
          add_filter('wp_link_pages_link', array($this, 'inner_page_link_format'), 10, 2); // for inner pages
          add_filter('redirect_canonical', array($this, 'cancel_redirect_for_paged_posts'), 10, 2);
        endif;
        if (is_admin()) :
          add_filter('rewrite_rules_array', array($this, 'pagelink_rewrite_rules'));
        endif;
      }
     
      /**
       * 修改post分页链接的格式
       * @param string $link
       * @param int $number
       * @return string
       */
      function inner_page_link_format($link, $number)
      {
        if ($number > 1)
        {
          if (preg_match('%<a href=".*\.html/\d*"%', $link))
          {
            $link = preg_replace("%(\.html)/(\d*)%", $this->separator . "$2$1", $link);
          }
        }
        return $link;
      }
     
      /**
       * 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
       *
       * 访问原始链接将返回404
       * @param array $rules
       * @return array
       */
      function pagelink_rewrite_rules($rules)
      {
        $new_rule[$this->post_rule] = 'index.php?name=$matches[2]&page=$matches[4]';
        return $new_rule + $rules;
      }
     
      /**
       * 禁止WordPress将页面分页链接跳转到原来的格式
       * @param string $redirect_url
       * @param string $requested_url
       * @return bool
       */
      function cancel_redirect_for_paged_posts($redirect_url, $requested_url)
      {
        global $wp_query;
        if (is_single() && $wp_query->get('page') > 1)
        {
          return false;
        }
        return true;
      }
    }
     
    new Rewrite_Inner_Page_Links();
    

    这样就得到了将类似http://www.domain.com/program/tokyodaigaku.html/2/ 的分页链接转化为形如 http://www.domain.com/program/tokyodaigaku/page-2.html 的链接。

    注意,我的伪静态规则是/%category%/%postname%.html,如果你的规则不同,请自行修改代码或者伪静态规则。

    重写URL规则

    如果不重写规则的话,WordPress是不认识这个链接的,它以为有个目录叫tokyodaigaku,里面有篇文章叫page-2.html,结果会给出一个无情的404错误:

    利用服务器的重写规则

    如果是SAE的话,在config.yaml的第一行加入:

     

     
    - rewrite: if ( !is_dir() && path ~ "(.+?)/([^/]+)(/page-([0-9]+))+.html/?$") goto "index.php?name=$2&page=$4"

     

    如果不是的话,可以利用WordPress自带的rewrite_rules:

    登陆后台——设置——固定链接:

    什么也不用填,直接保存更改即可。代码会自动在数据库中硬性加入一条规则:

     

     
    "(.+?)/([^/]+)(/page-([0-9]+))+.html/?$" => "index.php?name=$matches[2]&page=$matches[4]"

     

    最终效果

    无论是用http://www.domain.com/program/tokyodaigaku.html/2/ 还是 http://www.domain.com/program/tokyodaigaku/page-2.html,都可以访问第二页。

    具体效果放在第二页,顺便测试一下分页后缀效果

    好了,基本功能已经实现了,小伙伴们是否明白了呢,如有问题,请留言


    上一篇:微信支付扫码支付的PHP实例代码

    下一篇:功能强大的PHP发邮件类示例效果

    相关内容

    • 高性能PHP7

      高性能PHP7

      《高性能PHP 7》通俗易懂且图文并茂,实践案例丰富,相信一定能吸引大家阅读。全书目标清晰,始终围绕着如何使用PHP及周边技术来优化性能这一主题,能够为许多工程师解决实际问题。

      大小:11.3 MBPHP7

      点击下载
    • 跟兄弟连学PHP

      跟兄弟连学PHP

      本书是畅销书《细说PHP(第2版)》升级版,以实用为设计目标,包含PHP开发最主流的各项技术,对每一个知识点都进行了深入详细的讲解,并附有大量的实例代码,图文并茂,系统地介绍了PHP的相关技术及其在实际Web开发中的应用

      大小:302.8 MBPHP自学

      点击下载
    • PHP+MySQL动态网站开发从入门到精通

      PHP+MySQL动态网站开发从入门到精通

      《PHP+MySQL动态网站开发从入门到精通》本书循序渐进地介绍了PHP 7 MySQL 5.7开发动态网站的主要知识和技能,提供案例、课件、命令速查手册,让你看得懂、学得会、做得出,教你快速成为网站应用开发高手。

      大小:36.2 MB网站开发

      点击下载
    • PHP从入门到精通(第4版)

      PHP从入门到精通(第4版)

      《php从入门到精通(第4版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。《php从入门到精通(第4版)》共分4篇25章,

      大小:38.6 MBPHP入门

      点击下载
    • PHP编程入门与应用

      PHP编程入门与应用

      在近几年中,PHP已经发展成为世界上最为流行的Web平台,它运行在全球超过1/3的Web服务器上。PHP的发展不仅是数量上的,也是质量上的。越来越多的公司,包括全球500强榜上的公司都依靠PHP来

      大小:500 MBPHP编程

      点击下载
    • PHP开发实例大全:基础卷

      PHP开发实例大全:基础卷

      《PHP开发实例大全》625经典实例及源码分析 15个应用方向 两卷共1225例 40个方向 分门别类实例一应俱全 供学习、速查、实践练习的超全参考手册 php开发实战1200例 php范例大全之全新升级。

      大小:232 MBPHP开发

      点击下载
    • PHP和MySQL Web开发(第4版)

      PHP和MySQL Web开发(第4版)

      《PHP和MySQL Web开发》将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子

      大小:51.6 MB网站开发

      点击下载
    • PHP7.0+MySQL网站开发全程实例

      PHP7.0+MySQL网站开发全程实例

      《 PHP7.0MySQL网站开发全程实例 》在XAMPP集成化自然环境下,应用Dreamweaver对PHP动态网站开发。《PHP7.0MySQL网站开发全程实例》以全程实例课堂教学为设计方案总体目标,从网站开发自然环境的配

      大小:165.8 MB网站设计

      点击下载
    • PHP和MySQL Web开发(第5版)

      PHP和MySQL Web开发(第5版)

      在《PHP和MySQL Web开发》书中,我们将把使用PHP与MySQL的经验和心得体会毫无保留地分享给你,PHP和MySQL是目前热门的两个Web开发工具。

      大小:27 MB网站开发

      点击下载
    • PHP7从入门到精通:教学版(含源码视频)

      PHP7从入门到精通:教学版(含源码视频)

      《PHP 7从入门到精通》以零基础讲解为宗旨,以PHP 7为蓝本,用实例引导读者深入学习PHP编程的各项技术及实战技能,全面讲解PHP与Web、XML、JavaScript、Ajax、MySQL、Zend框架等技术的交互方法,帮助大家快速学习,欢迎下载。

      大小:426 MBPHP7

      点击下载
    • PHP+MySQL程序设计及项目开发

      PHP+MySQL程序设计及项目开发

      大小:105.1MBPHP+MySQL

      点击下载

    学习笔记