WordPress:如何将留言和 Trackback/Pingback 区分开来
WordPress 是一个功能极其强大的平台,内核程序的主要职责只是管理和维护一个包含有日志、用户、留言等信息的数据库,而不直接负责处理与前端用户的交互——但它提供了很多强大的接口,并把这一职责留给了 Theme,也就是我们常说的主题或模板。只要运用合适,我们可以在 Theme 中编写代码来完成任何我们希望的事情,当然,将留言和 Trackback/Pingback 进行区分也不例外。接下来,我会一步步讲解如何改造你的主题以达到这一目的。
如何将留言和 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
,代码如下:
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),看下面的代码:
if ('pingback' == get_comment_type()) {
$pingtype = 'Pingback';
} else {
$pingtype = 'Trackback';
}
......
// 在需要的地方,将类型打印出来:
<?php echo $pingtype; ?>
......
}
大功告成
上面只给出了关键的代码部分,再把细节地方修修,就差不多了。如果你遇到了什么困难,尽管在下面留言给我。
1 条留言 访客:0 条 博主:0 条