在浏览别人的网站或博客的时候,经常会看到在文章的上方或文章下方有“上一篇 下一篇”这样的链接。如果你正在使用wordpress,而使用的主题又没有提供这样一个功能,在你看完这篇文章之后,就可以自己手动修改主题,实现这一功能。

需要用到函数

按照惯例,首先介绍一下需要用到的函数,如果你对函数不感兴趣,可以直接跳到下面的实现方法。

wordpress提供了不少函数可以实现这一功能,不过随着版本的升级,有些函数已经不被推荐使用。今天DDBug介绍的是两个最常用的函数previous_post_link和next_post_link:

previous_post_link的功能是显示上一篇文章,原型如下

previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '')

第一个参数$format定义链接的格式或者说显示样式默认为    « %link  ,其中%link的内容在第二个参数中定义

第二个参数$link定义第一个参数中%link的显示内容,默认为%title,即文章标题,你也可以使用其它文字代替。

第三个参数$in_same_cat定义是否只显示同一分类下的文章,默认为否,即显示全部文章。

第四个参数$excluded_categories定义排除的分类ID,即不显示这些分类ID下的文章。

下面例举几个常用实例,来加深对这个函数的理解

代码:<?php previous_post_link(); ?>

效果:« 上一篇文章标题

代码:<?php previous_post_link('上一篇: %link'); ?>

效果:上一篇:上一篇文章标题

代码:<?php previous_post_link('%link','上一篇'); ?>

效果:上一篇

另一个函数next_post_link的作用是显示下一篇文章的链接,原型如下:

next_post_link($format='%link &raquo;', $link='%title', $in_same_cat = false, $excluded_categories = '')

该函数的参数和previous_post_link函数的参数是一样的,请参看上面对previous_post_link参数的说明。结合上面的实例,下面是与其对应的显示下一篇文章链接的参考实例:

代码:<?php next_post_link(); ?>

效果:下一篇文章标题»

代码:<?php next_post_link('下一篇:%link'); ?>

效果:下一篇:下一篇文章标题

代码:<?php next_post_link('%link','下一篇'); ?>

效果:下一篇

如果你想进一步了解previous_post_link和next_post_link,可以参看它们的源代码:wp-includes\link-template.php

实现方法

在你的模板文件夹下找到single.php文件,用文本编辑器打开,先找到Loop循环的位置,一般以下面这段代码开始

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

然后在其后的适当位置(一般在标题上面或者文章结束的下方)中加入如下代码

<div class="nearbypost">
  <div class="alignleft"><?php previous_post_link('&laquo; &laquo; %link'); ?></div>
  <div class="alignright"><?php next_post_link('%link &raquo; &raquo; '); ?></div>
 </div>

你可以通过CSS定义表现样式,比如我的CSS样式是这样定义的

.alignleft {
 float:left;
 text-align:left;
 margin-right:10px;
}
.alignright {
 float:right;
 text-align:right;
 margin-left:10px;
}

这样的效果就是:上一篇的链接对齐到左边,下一篇的链接对齐到右边,效果如下:

« « 上一篇文章标题                                                                下一篇文章标题 » »

高级应用

或许你有这样一个想法:我不想显示文章标题,只显示“上一篇 下一篇”,当鼠标经过的时候在提示中显示文章标题,即下面这样的效果

« « 上一篇                                                                         下一篇 » »

由于函数的源代码中,没有对链接添加”title”属性,所以要想实现这样一个功能,就需要修改源代码:

  1. 找到wp-includes目录下的link-template.php文件,并用文本编辑器打开
  2. 查找adjacent_post_link的函数定义位置

function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true) {

在这个函数的定义体中,你会发现这样一行

$string = '<a href="'.get_permalink($post).'">';

把它修改成

$string = '<a href="'.get_permalink($post).'" title="'.$title.'">';

这样修改以后,再调用previous_post_link和next_post_link函数时,就会在提示中显示文章标题。我们就可以这样调用

<div>   <div><?php previous_post_link('&laquo; &laquo; %link','上一篇'); ?></div>   <div><?php next_post_link('%link &raquo; &raquo; ','下一篇'); ?></div>  </div>

这样就达成了我们的目的。

或许还有其它方法或以实现,欢迎讨论O(∩_∩)O~

 

添加评论

23 条评论

  1. 1 F

    Rtrash|废纸篓

    2009-12-24 星期四 15:39

    文章有几处是错误的!”;”
    ?号前面没有“;”

    回复
    • DDBug

      2009-12-24 星期四 15:52

      哪个问号前没有 “;”
      麻烦你帮我明确一下,我好修改,找了半天还没找到,谢谢

      回复
      • zuoshangs

        2010-02-23 星期二 12:15

        对啊 ,我虽然没学过php,但是看着就感觉格式不对

        回复
      • albus

        2011-05-15 星期天 17:22

        实现方法一段的第一个 ; 打成了 :

        回复
        • albus

          2011-05-15 星期天 17:25

          不好意思,好像搞错了,前面是if

          回复
  2. 2 F

    Rtrash|废纸篓

    2009-12-25 星期五 02:01

    问号前面没分号

    回复
  3. 3 F

    一心而已

    2010-04-18 星期天 11:04

    文章题目太长的话 有可能导致侧边栏下沉

    回复
    • DDBug

      2010-04-18 星期天 11:20

      你说的这种情况是css样式没有控制好

      回复
  4. 4 F

    michaelni

    2010-05-17 星期一 17:12

    博主的文章都很不错,很受益,多谢了!

    回复
  5. 5 F

    mcooo

    2010-06-12 星期六 02:29

    next_post_link函数的链接,问下博主不用改原始源代码 如果链接是http://domety.com/archives/134/ 改为 #archives/134/ 这样可不可以啊,str_replace和preg_replace 用这两个可不可以做到???

    回复
    • DDBug

      2010-06-12 星期六 08:51

      可以,把你的固定链接设置为#archives/%post_id%/ 就行了

      回复
      • mcooo

        2010-06-12 星期六 12:25

        不过我想在next_post_link函数中改啊,不是固定链接设置的!

        回复
  6. 6 F

    oblue

    2010-06-27 星期天 14:46

    你好,但如果死最后一篇或者是最前面一篇,该加个什么样的判段语句?
    比如是第一篇或者最后一篇,上面显示没有上一篇或没有下一篇…

    回复
  7. 7 F

    starwalker

    2010-11-23 星期二 22:58

    谢谢,又学到一招

    回复
  8. 8 F

    亿品元素

    2010-11-25 星期四 19:02

    按你的这个加了

    回复
  9. 9 F

    Lax-Apple

    2010-11-30 星期二 22:00

    用你的代码加上了“上一篇”“下一篇”链接,本来还想把“下一篇”居右显示的,但不知css代码加在什么地方

    回复
  10. 10 F

    张衡henry

    2011-12-08 星期四 20:10

    介绍的很详细,多谢分享。

    回复

添加评论