wordpress 功能集成(七):无插件改变文章内页页码样式

本贴最后更新于 4465 天前,其中的信息可能已经时移世改

上篇文章说到了分类页的页码实现,但是wordpress还有给长文章分页的功能,实现方法很是简单:我们知道wordpress有个more标签,在后台有个按钮可以直接插入,但是wordpress还有个<!--nextpage-->标签,只是编辑器上对应的按钮没有显示出来而已,<!--nextpage-->可以给长文章分页,编辑文章的时候,切换到html输入,然后在需要分页的地方输入

  1. <!--nextpage-->    

即可,跟more标签的用法一样。添加分页页码之后,我们只需要在模板输出内容:<?php the_content(); ?>函数的后面加上页码函数,不过这个函数只能显示页码,却不能显示上一页下一页链接:

  1. <?php    
  2.          wp_link_pages();   
  3.  ?>   

所以我们一般需要将这个函数使用3次,即可达到效果:“上一页  1 2 3 4 下一页”:

  1. <?php      
  2.     wp_link_pages('before=&after=&next_or_number=next&previouspagelink=上一页&nextpagelink='); //第一个函数显示“上一页”      
  3.     wp_link_pages('before=&after='); //第二个显示数字页码      
  4.     wp_link_pages(before=&after=&next_or_number=next&previouspagelink=&nextpagelink=下一页); //第三个显示“下一页”      
  5. ?>   

一般人的需求到此即可了。

但是这样虽然可以显示“上一页”“下一页”链接,但是也有个致命缺陷,比如当前访问第一页时显示的是  :  1 2 3 4 5 下一页 ,也就是“上一页”不显示,但是网页源代码里面还是有一个连接“<a href="link"></a>”,只不过没有连接文字而已,这个缺陷使得页码不能实现一些效果,比如我们上一篇文章中的图类似效果:

文章内页页码样式

由于前面有一个空的<a>标签,给<a>标签添加边框背景等样式的时候,前面空的<a>标签也会显示样式。

要解决这个问题,只好查看此函数的函数源码了,wp_link_pages函数位于wp-includes/post-template.php文件,看了一下这个函数,输出的时候没有提供过滤器和动作钩子,所以我们只好修改wp_link_pages()函数了,为避免修改wp默认的的那些文件,我们可以讲wp_link_pages() 复制出来,粘贴到functions.php文件,然后改个名字,比如我改成了ashu_link_pages() 新函数如下,修改的地方我注释了,可对比:

 
  1. function ashu_link_pages($args = '') {      
  2.     $defaults = array(      
  3.         'before' => '<p>' . __('Pages:'), 'after' => '</p>',      
  4.         'link_before' => '', 'link_after' => '',      
  5.         'next_or_number' => 'number', 'nextpagelink' => __('Next page'),      
  6.         'previouspagelink' => __('Previous page'), 'pagelink' => '%',      
  7.         'echo' => 1      
  8.     );      
  9.     $r = wp_parse_args( $args, $defaults );      
  10.     $r = apply_filters( 'wp_link_pages_args', $r );      
  11.     extract( $r, EXTR_SKIP );      
  12.     global $page, $numpages, $multipage, $more, $pagenow;      
  13.     $output = '';      
  14.     if ( $multipage ) {      
  15.         if ( 'number' == $next_or_number ) {      
  16.             $output .= $before;      
  17.             for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) {      
  18.                 $j = str_replace('%',$i,$pagelink);      
  19.                 $output .= ' ';      
  20.                 if ( ($i != $page) || ((!$more) && ($page==1)) ) {      
  21.                     $output .= _wp_link_page($i);      
  22.                     $output .= $link_before . $j . $link_after;//将原本在下面的那句移进来了      
  23.                 }else{  //加了个else语句,用来判断当前页,如果是的话输出下面的      
  24.                     $output .= '<span class="page-numbers current">' . $j . '</span>';      
  25.                 }      
  26.                 //原本这里有一句,移到上面去了      
  27.                 if ( ($i != $page) || ((!$more) && ($page==1)) )      
  28.                     $output .= '</a>';      
  29.             }      
  30.             $output .= $after;      
  31.         } else {      
  32.             if ( $more ) {      
  33.                 $output .= $before;      
  34.                 $i = $page - 1;      
  35.                 if ( $i && $more && $previouspagelink ) { //if里面的条件加了$previouspagelink也就是只有参数有“上一页”这几个字才显示      
  36.                     $output .= _wp_link_page($i);      
  37.                     $output .= $link_before. $previouspagelink . $link_after . '</a>';      
  38.                 }      
  39.                 $i = $page + 1;      
  40.                 if ( $i <= $numpages && $more && $nextpagelink ) {      
  41.                 //if里面的条件加了$nextpagelink也就是只有参数有“下一页”这几个字才显示      
  42.                     $output .= _wp_link_page($i);      
  43.                     $output .= $link_before. $nextpagelink . $link_after . '</a>';      
  44.                 }      
  45.                 $output .= $after;      
  46.             }      
  47.         }      
  48.     }      
  49.     if ( $echo )      
  50.         echo $output;      
  51.     return $output;      
  52. }    

再用这个函数3次,完全可以实现各种样式如图:

文章内页页码样式

文章内页页码样式

  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 114 回帖 • 170 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 491 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 32 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 59 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 766 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖
  • OnlyOffice
    4 引用 • 16 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 109 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 271 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 1 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    291 引用 • 4495 回帖 • 662 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖 • 1 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 414 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 464 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • Outlook
    1 引用 • 5 回帖 • 5 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 675 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    180 引用 • 3878 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 10 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 515 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • 叶归
    12 引用 • 56 回帖 • 21 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖 • 2 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注