详解在wordpress 2.7中实现单篇文章的分页功能

2009年4月25日 | 分类: Wordpress | 标签: , , , | 字体: 超大


  有些很长的文章,例如上几万字的,甚至几十万字的,在首页还可以用“ <!--more--> ”代码分隔。可是,打开单页的时候,如果一下子拉出几十米长的文章肯定会吓跑很多读者的。

  这时候就需要用到另一个分页的代码“ <!--nextpage--> ”来将文章进行适量的缩短,做成内分页,不仅能增加读者的文章阅读舒适度,还能让页面的打开速度加快不少,尤其是文章有很多插图的。

  可是,wordpress 2.7默认无法使用“ <!--nextpage--> ”,只能自己动手来丰衣足食了。小程在网上找了半天,发现要么是方法部分过时,要么是写得不够详细,于是我东拼西凑,总算把整个方法总结了出来,完全支持wordpress 2.7。

  注意:以下文件的修改请使用专业的文档编辑软件,不要用记事本修改,最后必须另存为“UTF-8”格式进行覆盖!大家可以使用EmEditor编辑软件(点击下载),很不错,小程我一直在使用。


1.后台编辑支持

  在wordpress的后台编辑发表文章的地方是没有nextpage分页选项的,因为默认将其屏蔽了,我们要做的就是将选项重新开启,这样就可以在编辑的时候看见了。

  首先找到wordpress的文件,在文件夹“\wp-includes\js”下,找到“quicktags.js”,在其中找到以下的句子:

/*
edButtons[edButtons.length] =
new edButton('ed_next'
,'page'
,'<!--nextpage-->'
,''
,'p'
,-1
);
*/

  然后将符号“/*”和“*/”都删除掉,这符号相当于把其中的句子作为编码注释给屏蔽了,删除掉后就相当于打开了中间语句的功能。

  接着,再找到以下的句子:

//    t.Buttons[t.Buttons.length] = new edButton(name+'_next','page','<!--nextpage-->','','p',-1);

  去掉句子前面的符号“//”。

  将文件保存(保存方式请看前面的“注意”),上传、覆盖,我们就可以在后台的“HTML源代码”编辑中看见“page”的代码插入选项了。

  如图:wordpress page选项1.小程故事多.xc84.com

  接着,我们实现在“可视化编辑”中也能插入分页代码。在文件夹“\wp-admin\includes”中,打开编辑“post.php”,找到以下的句子:

'|', 'link', 'unlink', 'wp_more', '|',

在“  'wp_more',  ”后面添加上“ 'wp_page', ”,语句变成了:

'|', 'link', 'unlink', 'wp_more','wp_page', '|'

  保存、上传、覆盖,就可以在“可视化编辑”中看见如图所示的选项了:wordpress page选项2.小程故事多.xc84.com

  不过,这样只是让后台有了支持,还必须需要单页文件“single.php”的函数支持,我们接着以下的操作。

 下一页

→文章分页: 1 2 3
  1. 2010年6月27日23:03

    好文章,终于弄好了。谢谢

  2. 2010年5月19日13:53

    学习了~

  3. 2009年9月13日01:03

    好东东!好用,学习了!

  4. 2009年7月7日18:53

    不错,请问怎么在head 那一栏加pages.且不同pages 可发表不同的post?
    欢迎来访问http://www.farfartravel.com

    • 2009年7月7日19:39

      不好意思,不是太懂你的意思。能否说得再详细一些?另外,你的博客访问不了,不知是什么缘故。

  5. 2009年5月29日09:58

    留言不成功,不知为什么,关闭了?唉,自己到我的网站去看吧。

    • 2009年5月29日10:08

      我设置的留言有个限制,凡是留言有两个以上的链接的时候需要经过我的审核才能在前台看见的,所以你的留言暂时没显示出来。

      至于引用我的文章我也不介意的,呵呵。

      • 2009年5月29日15:20

        好的,大家相互交流,这样才更容易提高!谢谢你的文章,不错!!

  6. 2009年5月28日17:40

    我已经改成了“上一页 1 2 3 4 5 下一页”的形式,并把你的文章适当加工写进了我的博客,不介意吧(也是自己备份的需要,今天上午你的博客不能访问),同时感谢 carp 的代码!
    http://www.lucktu.com/html/2009/05/297.html

    • 2009年5月29日10:07

      最近我又稍微改了一下,让页码单独的显示,然后“上一页”“下一页”单独一行,字条调大并居中,我感觉这样会更加的方便访客阅读。

  7. 2009年5月20日21:34

    朋友,你的上一页、下一页不调整了吗?
    其实调整的方法很简单,就是“carp”朋友的代码,全部是,适当修改就可以了。祝你好运!

    • 2009年5月20日21:38

      嗯,我知道我为什么会老弄不好了,因为我用了两种代码,所以老出问题,后来我想想就这样算了,反正也没什么影响。谢谢你的提醒了。

  8. lucktu
    2009年5月17日22:34

    搞了半天,准备接着回复,但是没有会,只好开新贴。
    感谢“carp”提供,希望能改成 “上一页 1234567 下一页”,将其中的当前页加粗就好了;
    或者改成“共7页 第3页 上一页 下一页”。

    • 2009年5月17日22:41

      呵呵,和我想法一样,我正在想法看能不能做成那样。

      • lucktu
        2009年5月17日22:47

        现在好像可以回复了(有时有显示提交按钮,有时又没有——没有时将鼠标放那里好像又像有的样子,似乎可以按,这次就是);另外,你的页面底部的“网站管理 注销”按钮与版权信息栏有些错位,站长朋友好像把模板代码搞乱了点——网站的内容还不错!!

        • 2009年5月17日22:53

          呵呵,你很细心啊,我也觉得这个挺奇怪的,那个回复按钮不能显示。

          至于底下的错位,我也想弄好,不过不太清楚怎么回事,刚开始弄了个统计代码上去就这样了,整了半天都没弄好,后来就放弃,幸好没什么影响,顶多是注册了的朋友会发现这个问题。当然还有我。

        • lucktu
          2009年5月17日23:00

          回复按钮我不会,页面底部的你可以参考一下我的,搞好后将这里的多余的乱七八糟的东西删除:
          $copyright .= ' ';

          echo $copyright;
          bloginfo('name');
          }
          ?>
          | 蜀ICP备050XXX79号 |

        • lucktu
          2009年5月17日23:01

          真的被编辑了,唉,,,

        • 2009年5月17日23:06

          我理解你的意思,没关系的,再说,我建议把主题模板的作者的地址留着,算是对对方劳动的尊重。

        • lucktu
          2009年5月18日08:34

          有道理,我将加一个他的链接在我的网站,算是对他的感谢吧。
          (以前从那个总的wordpress网站下载的主题,没注意到是咋中国人;再说我也希望保持网站的清爽,所以就这样了)

    • 2009年5月18日08:18

      我也一直想改成那样,但是改不了,wp_link_pages()这个函数的代码中格式很固定,数字和上下页只能选择一个("next_or_number" => "number" 或者 "next_or_number" => "next",这个
      "next_or_number"参数就是选择输出方式是数字还是上下页的),而且上一页、下一页必须同时出现

      • lucktu
        2009年5月18日08:40

        不过已经很不错了,我有空(关键是不懂)也试着按另外的格式摆放一下:
        样板:http://www.lucktu.com/?p=109

      • 2009年5月18日11:26

        我昨天尝试了下,确实不行,真希望自己能懂php,呵呵。

    • lucktu
      2009年5月18日22:18

      我给改成了:“页次: 1 2 3 上一页 下一页”的样子,只好凑合着用了。感谢carp朋友的代码(如需要请按照carp的适当修改)!
      演示地址:http://www.lucktu.com/?p=110&page=2

      • 2009年5月18日22:25

        嗯,那个函数也只能发挥到这种程度了,除非再找更好的处理分页的函数,或者自己写个函数……

    • 2009年5月29日09:56

      我已经改成 上一页 123456 下一页 的样子了,并将你这篇适当修改放到了我的博客,不介意吧?
      方法:http://www.lucktu.com/html/2009/05/297.html
      演示:http://www.lucktu.com/html/2009/05/108-5.html

  9. lucktu
    2009年5月17日21:43

    不错,借用了,希望能搞出上一页、下一页就好了。
    很高兴,咱们用的一个模板:http://www.lucktu.com

    • 2009年5月17日22:01

      嗯,我再去研究下,应该是可以弄成这样的。

    • 2009年5月17日22:11

      上一页、下一页我琢磨出来了,在这里不能直接贴代码,会被WP编译的,我把代码放到文本文件里了:
      http://www.smartcarp.com/upfiles/200905/fenye.txt

      • 2009年5月17日22:17

        carp真是好人啊,不介意我将其补充进我的文章中吧?我会表明出处的

        • 2009年5月17日22:21

          呵呵,不介意。这些就是上次我在这里贴了好几次没成功的代码,今天看到又有人问这个,我就传了个txt文档

  10. 2009年4月26日14:14

    link_pages()函数最后是调用wp_link_pages()函数的,WP论坛一个版主说“2.1版以后弃用了link_pages()”,我根据网上的例子稍微明白了些wp_link_pages()函数的调用方法

    用(可能里面的标记会导致你的页面错位,或者英文双引号变成中文的了,如果错位就把这个回复删掉吧)

    "", "after" => "", "next_or_number" => "next", "previouspagelink" => __("上一页 "), "nextpagelink" => __(" 下一页") )); ?>

    "", "after" => "", "next_or_number" => "number")); ?>

    代替

    <?php link_pages('分页: ', '', 'number'); ?>

    就可以“上下页”和页码都显示出来了,只不过是调用两次wp_link_pages函数,但是参数不一样。
    "next_or_number" => "next" 代表以“上下页”来显示,"next_or_number" => "number" 代表以页码来显示。

    看代码,貌似以“上下页”来显示只能同时出现,不能让它们分开来调用,所以不能出现“上一页 1 2 3 下一页”这样,只能是“上一页 下一页 1 2 3”这样显示 -.-!

    • 2009年4月26日14:15

      晕~ 代码还是没显示全……

    • 2009年4月26日14:16

      给php代码加上注释试试……

      // "", "after" => "", "next_or_number" => "next", "previouspagelink" => __("上一页 "), "nextpagelink" => __(" 下一页") )); ?>

      // "", "after" => "", "next_or_number" => "number")); ?>

    • 2009年4月26日14:20

      "", "after" => "", "next_or_number" => "next", "previouspagelink" => __("上一页 "), "nextpagelink" => __(" 下一页") )); ? >

      "", "after" => "", "next_or_number" => "number")); ? >

      在关键字中间加了些空格隔开……

    • 2009年4月26日14:24

      无奈了,都被编译了~ 我在本地inove中回复都能显示出来~~~
      不知道你在后台能不能看到我贴的原始代码,上面几个试验回复可以删掉……

      • 2009年4月26日17:01

        我在后台看还是一样的。
        你的评论也没必要删除吧,还是留着吧,而且我博客缺少评论呢,哈哈。

  11. 2009年4月26日12:33

    正在研究 link_pages() 函数,在/wp-includes/deprecated.php 文件中有这个函数的定义,不知道该怎么写参数可以在页面里加上 “上一页”、“下一页”的功能

    我偶然试了下,把 <?php link_pages('分页: ', '', 'number'); ?> 改成 <?php link_pages('分页: ', '', 'number-1'); ?> 试了试,就会出现英文的“上一页”、“下一页”了,但是分页数字全不见了

    PHP我不是很懂,刚开始学,不知道该怎么写 link_pages() 函数的参数才可以加上这个功能,继续研究……

    • 2009年4月26日12:43

      我也爱莫能助,我完全不懂php语言,倒腾这些全靠网络到处收集资料,然后做个归类和耍些小聪明而已,呵呵。

      • 2009年4月26日12:47

        看别人的PHP代码给我的感觉特别绕,尤其是函数引用,里面的参数都不知道他们为什么要填一个自己认为很不可思议的数据类型~

  12. 2009年4月26日10:56

    写得很详细,先顶后试……

  13. mjkl100
    2009年4月26日07:33

    有实现单篇文章自动分页的方法吗?

    • 2009年4月26日07:53

      暂时还没找到自动分页的方法,不过我看过使用more代码自动分页的,就是在首页,看见的文章长度都一样,也比较整洁,想必也应该可以应用于nextpage的代码吧。

  14. 2009年4月26日06:38

    还有你这个主题不错,MG12,可是默认的样子不好看,你这个弄的挺不错的,,能否给我一份,发到我的邮箱,谢了,

    • 2009年4月26日07:49

      是这样的,mg12的主题其实是支持很多个不同style的,这个在你使用了这款主题后台就可以自己设置的,并没有什么技巧可言。如果你找不到主题,我可以提供给你,不过设置确实是非常容易的事情,也就没有什么“修改后的主题传给你”这么一说。

  15. 2009年4月26日06:36

    还有

  16. 2009年4月26日06:35

    写得很详细,不错.