Loading...

WordPress:如何将留言和 Trackback/Pingback 区分开来

很久没有写过 WordPress 的东西了,可能是“我想知道”的东西已经全部都有了答案,就懒得再继续探索了——另一方面也因为 WordPress 足够简单——于是 WordPress 在我这里出现的频率是一跌再跌,很是愧对各位 WP 爱好者。所以打算在今天晚饭之前(事实证明失败了,吃了饭继续写)来弥补弥补,写一点(可能)有用的 WordPress 的东西。

如何将留言和 Trackback/Pingback 区分开来

首先大家需要明白,WordPress 是一个功能极其强大的平台,内核程序的主要职责只是管理和维护一个包含有日志、用户、留言等信息的数据库,而不直接负责处理与前端用户的交互——但它提供了很多强大的接口,并把这一职责留给了 Theme,也就是我们常说的主题或模板。只要运用合适,我们可以在 Theme 中编写代码来完成任何我们希望的事情,当然,将留言和 Trackback/Pingback 进行区分也不例外。接下来,我会一步步讲解如何改造你的主题以达到这一目的。

第一步 / Step 1

在一篇日志下面显示留言信息依赖于 Theme 的 comments.php 文件,其中的全局变量 $comments 保存了该日志拥有的全部 comments,包括留言、Trackback/Pingback(如果有的话)。我们第一步需要做的,就是建立两个数组 $comments_list$pings_list,用来分别存放留言和非留言数据。方法很简单,我们循环检查每条 comment 的类型是否为 "comment"(普通留言),并以此为据进行分类,是:放进 $comments_list;否:放进 $pings_list,代码如下:

// Seperate comments and pings
if ($post->comment_count> 0) {
    $countComments = 0;
    $countPings = 0;
    $comments_list = array();
    $pings_list = array();
    foreach ($comments as $comment) {
        if ('comment' == get_comment_type()) {
            $comments_list[++$countComments] = $comment;
        } else {
            $pings_list[++$countPings] = $comment;
        }
    }
}

第二步 / Step 2

接下来,我们把已经区分开的留言和 Trackback/Pingback 显示出来。在默认的情况下,comments.php 使用了下面这个循环 foreach ($comments as $comment) 来显示所有留言,现在,我们要对它稍加改造,让它只显示普通留言:foreach ($comments_list as $comment)。那么 Trackback/Pingback 呢?好的,我们继续第三步。

第三步 / Step 3

复制!复制!我们 comments.php 中用于显示普通留言的代码(整个 ul 或 ol 列表)复制下来,再对循环稍加改造,让它不仅能显示 Trackback/Pingback,还能同时显示类型(究竟是 Trackback 还是 Pingback),看下面的代码:

foreach ($pings_list as $comment) {
    if ('pingback' == get_comment_type()) {
        $pingtype = 'Pingback';
    } else {
        $pingtype = 'Trackback';
    }
    ......
    // 在需要的地方,将类型打印出来:
    <?php echo $pingtype; ?>
    ......
}

大功告成

上面只给出了关键的代码部分,再把细节地方修修,就差不多了。如果你遇到了什么困难,尽管在下面留言给我。 :lol:

哦对了,效果嘛,你在我这里找一篇既有普通留言,又有 Trackback 和 Pingback 的日志看看吧!

13Comment(s). Blabla or Trackback

  • 漫步 at 20:34 Dec 10, 2007 

    是你要我抢的,我就不客气了,我是用的一个插件实现的.不过还是需要改模版就是,..

  • 北极冰仔 at 21:10 Dec 10, 2007 

    啊哦,这样啊,我以为 iBlue 主题是自动实现的。

  • 小胖 at 21:11 Dec 10, 2007 

    很好的一个教程,我照这个步骤自己改了一下,搞定了。
    表示感谢!

  • yichi at 02:45 Dec 11, 2007 

    受用呀,虽然看了一遍还是不知所以然:)
    期待这样的好文

  • 北极冰仔 at 09:26 Dec 11, 2007 

    yichi » 昏,看来我没写明白。

  • 北极冰仔 at 13:19 Dec 12, 2007 

    测试 PortableFirefox

  • AndyWxy at 22:28 Dec 13, 2007 

    哦~~ 冰仔又上好文啊!不错不错!
    对了,冰仔你的flickr用的哪个插件涅?

  • 北极冰仔 at 09:09 Dec 14, 2007 

    AndyWxy » 谢谢夸奖^_^ 那个用 flickrRSS 插件。

  • yichi at 23:12 Jan 19, 2008 

    冰仔呀,建议写个更详细的教程出来,因为我还是没有实现,呵呵。很好的文章!

    yichi’s last blog post..PDP Panel Icon

  • 北极冰仔 at 11:02 Jan 20, 2008 

    yichi » 我这篇写的很粗略,有空再加工一下。

  • yichi at 15:36 Jan 20, 2008 

    拭目以待 :)
    yichi’s last blog post..PDP Panel Icon

  • Charles at 19:48 Jun 05, 2008 

    很好,很有帮助!!

  • name at 02:42 Jul 28, 2008 

    Really nice=)but look this:,

Blabla ↓

Connecting to server...

6Pingbacks & Trackbacks