WordPress用html的后缀时的分页链接解决方法_wordpress教程


    我们在使用WordPress的时候,设置页面的固定链接设为/archives/%postname%.html这种样式时可以让页面看起来像静态页,但同时也会使分页链接变得十分奇怪,比如*Bug的就是评论的分页链接会变成”hello-world.html/comment-page-1#comments”,html既然是后缀就应该一直在*后,要解决这个问题来看看是怎么做的吧。

    假设页面链接为hello-world.html,当在文章中插入分页时,我们希望分页链接格式为hello-world/page-2.html,评论分页链接则为 hello-world/comment-page-2.html。

    这里可以通过filter将分页链接改成希望的格式,分别用到wp_link_pages_link和 get_comments_pagenum_link

    首先添加自定义跳转规则,利用filter rewrite_rules_array取消Canonical URL(标准链接)跳转,否则使用新链接访问时WordPress会强制跳转到原来的链接,代码如下(下面这段代码放在主题的functions.php中,保存后需要到设置中重新保存一下固定链接。):

    class 
    Rewrite_Inner_Page_Links{
            var $separator;
            var $post_rule;
            var $comment_rule;
            function __construct(){
                    $this->separator = 
    '/page-'
    ;
                    $this->post_rule = 
    'archives/([^/]+)('
    .$this->separator.
    '([0-9]+))?.html/?$'
    ;
                    $this->comment_rule = 
    'archives/([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$'
    ;
                    
    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( 
    'get_comments_pagenum_link'
    , array( $this, 
    'comment_page_link_format'
     ) );
                            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;
            }
            
    /**
              * 修改评论分页链接
              * @param string $result
              * @return string
              */
            function comment_page_link_format( $result ){
                    
    // From hello-world.html/comment-page-1#comments to hello-world/comment-page-1.html#comments
                    
    if
    ( strpos( $result, 
    '.html/'
     ) !== 
    false 
    ){
                            $result = preg_replace( 
    '=([^/]+)(.html)/comment-page-([0-9]{1,})='
    , 
    "$1/comment-page-$3$2"
     ,$result );
                    }
                    
    return 
    $result;
            }
            
    /**
              * 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
              *
              * 访问原始链接将返回404
              * @param array $rules
              * @return array
              */
            function pagelink_rewrite_rules( $rules ){
                    foreach ($rules as $rule => $rewrite) {
                            
    if 
    ( $rule == 
    '([^/]+).html(/[0-9]+)?/?$'
     || $rule == 
    '([^/]+).html/comment-page-([0-9]{1,})/?$'
     ) {
                                    unset($rules[$rule]);
                            }
                    }
                    $new_rule[ $this->post_rule ] = 
    'index.php?name=$matches[1]&page=$matches[3]'
    ;
                    $new_rule[ $this->comment_rule ] = 
    'index.php?name=$matches[1]&cpage=$matches[2]'
    ;
                    
    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();


     

    以上代码只适用于固定链接格式为/archives/%postname%.html,若固定格式不同需要作相应修改:

    若固定链接格式为/%postname%.html,请修改规则,将


    $this->post_rule = 'archives/([^/]+)('.$this->separator.'([0-9]+))?.html/?$';
    $this->comment_rule = 'archives/([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$';
     

    修改为:


    $this->post_rule = '([^/]+)('.$this->separator.'([0-9]+))?.html/?$';
    $this->comment_rule = '([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$';
     

    这里介绍的方法演示了修改固定链接格式、并添加新Rewrite rules的方法,适用于其他情况。例如修改custom post type的固定链接,不同的是用哪个filter来修改链接输出格式,大家延伸扩展即可!



# 山东常规网站建设服务费  # filter  # 拉夏贝尔的营销推广  # 岳阳seo优化有哪些  # 彭水网络营销线上推广  # 安简云营销推广怎么做  # 孝昌县网站建设项目招标  # 裂变营销推广语  # seo优选4火星  # 深圳seo网络推广公司  # 南京越城建设集团网站  # margin  # seo管理系统营销  # 惠州网站优化推广公司  # 上海seo行业外包服务  # 杭州*关键词排名规格  # 唐山无锡网站推广  # 外贸平台排名关键词  # 华蓥仪器仪表网站推广  # 铁岭网站优化多少费用  # 甘肃专业网站优化软件  # 建设网站都有哪些费用  # 放在  # wordpress教程  # WordPress  # 分页链接  # 分页  # 格式为  # 适用于  # 跳转  # 跳转到  # 的是  # 重定向  # WordPress用html的后缀时的分页链接解决方法  # 设为  # 这段  # 可以通过  # 来看看  # 自定义  # 怎么做  # 会使  # 则为  # 解决这个问题  # 移除 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  织梦调用文章简介[field:description /]如何限制字数_织梦CMS教程  dedecms织梦前台会员中心上传附件方法_织梦CMS教程  建站之星安全性能如何?防护体系能否抵御黑客入侵?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  织梦dedecms网站sitemap及rss地图自动生成在根目录插件_织梦插件  织梦实现在图集文章内容页调用缩略图和原图教程_织梦CMS教程  建站之星配置全解析:模板选择与填写指南轻松掌握  织梦网站怎么根据IP获取当地的天气预报_织梦CMS教程  织梦(今日更新等)经常用到的统计代码SQL调用语句_织梦CMS教程  织梦dedecms获取会员登录状态的二种方法_织梦CMS教程  如何高效完成自助建站业务培训?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  织梦dedecms自定义表单发送到指定邮箱-用*、163邮箱发送邮件_织梦插件  织梦删除文章时不删除HTML与不删除附件图片_织梦CMS教程  织梦dedecms手机站与PC站同步生成静态文件html教程_织梦插件  网站二级目录绑定到二级域名_织梦CMS教程  建站哪里好?优选平台推荐与关键词优化指南  织梦dedecms用火车头采集分页教程 _织梦CMS教程  子杰智能建站系统|零代码开发与AI生成SEO优化指南  织梦友情链接标签dede:flink使用limit标签方法_织梦CMS教程  如何通过西部建站助手安装IIS服务器?  dedecms织梦ckeditor编辑器整合七牛云支持支持图集[上传][编辑][删除]_织梦插件  建站之星智能建站系统:自助模板+五合一响应式设计指南  定制建站方案优化指南:企业官网开发与建站费用解析  如何找回帝国CMS系统(EMPIRECMS)管理员密码_帝国CMS教程  建站之星智能模板:响应式设计+SEO优化一站式建站方案  建站主机与虚拟主机有何区别?如何选择最优方案?  织梦dedecms后台邮件服务器明文密码修改为*星号显示的暗密码_织梦CMS教程  如何快速上传建站程序避免常见错误?  织梦当前位置(面包屑)各种写法汇总_织梦CMS教程  如何在阿里云购买域名并搭建网站?  建站之星安装提示数据库无法连接如何解决?  如何快速搭建个人网站并优化SEO?  如何在建站之星网店版论坛获取技术支持?  建站之星云端配置指南:模板选择与SEO优化一键生成  织梦php7数据库备份无结果BUG修复方法_织梦CMS教程  织梦DEDECMS搜索提交用a便签替换button标签方法_织梦CMS教程  建站之星授权查询步骤有哪些?如何验证?  建站主机无法访问?如何排查域名与服务器问题  织梦dedecms5.7首页分页插件下载_织梦插件  织梦检索数据查询数据库前端实现搜索功能(PHP网站通用) _织梦CMS教程  织梦DedeTag Engine Create File False的彻底解决方法_织梦CMS教程  dedecms织梦自定义递归函数调用所有栏目_织梦CMS教程  如何解决VPS建站LNMP环境配置常见问题?  如何解决ASP生成WAP建站中文乱码问题?  建站助手共享版:智能模板一键生成与多端适配指南  如何高效生成建站之星成品网站源码?  linux服务器wdcp面板做301域名重定向设置_织梦CMS教程  建站VPS推荐:2025年高性能服务器配置指南 

 2018-04-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.