浅谈WordPress的Pingback和TrackBack机制及其优化

Pingback和TrackBack都是是博客系统中用来通知其他博客文章被引用情况的一种手段。它们使得博客作者可以追踪什么人链接至他的文章。WordPress这类高级博客平台具有自动pingback文章中所有的链接的功能(TrackBack需要手工添加链接,也就是说Pingback是博客系统自动像文中链接发送的,而TrackBack是博主手工添加需要发送TrackBack的链接,它们两者本质一样,都是基于XML-PRC,都是发送ping,至于两种ping有啥区别,就不清楚了)。

  • 在后台的 设置》讨论里可以设置“尝试通知文章中链接到的所有博客”,WordPress就会在文章发布时自动ping文章中所有的链接。第二个选项设置是否接受来自外部的Pingback和TrackBack。

    Pingback

    在后台的 设置》讨论里可以设置“尝试通知文章中链接到的所有博客”

  • 如果除了文章中提到的链接外,你还想向一个“额外”的链接发送Ping,那么在文章撰写页面的TrackBack框内填写地址:

    TrackBack

    在文章撰写页面的TrackBack框内填写地址,向一个“额外”的链接发送Ping

  • WordPress接收到了Pingback/TrackBack,会当成评论,自动截取摘要和众多评论显示在一起。(WordPress默认把一下三种类型的“东西”当做评论:comment(访客在留言框里的留言)、pingback、trackback)。通过修改代码,可以让评论区域只显示comment,在其他区域单独显示pingback、trackback,例如:笔者的主题支持trackback单独显示(示例

    Trackback

    笔者的主题支持trackback单独显示

Pingback和TrackBack这两种机制,相辅相成,通通过发送ping,通知被引用的站点:“我的这篇文章引用/参考了你的这篇文章”,从而增加了站点间的互动。


说了这么多Pingback和TrackBack的原理,不得不提到一个比较出名的Pingback机制的优化技巧(hack):

WordPress会自动ping文章中所有的链接,包括内链,比如在博客的B文章中提及A文章并带有链接,那么B文章发布时也会“不假思索”地向A文章发送ping,A文章的评论区域随即出现一个pingback类型的评论,这样的评论没有任何实际意义。

那么如何让WordPress不要ping文章中包含的内链呢?可以使用一个叫做No Self Pings的插件,如果不喜欢插件可以使用下面一段代码:

// 在functions.php里添加以下代码:
function no_self_ping( &$links ) {
 $home = get_option( 'home' );
 foreach ( $links as $l => $link )
 if ( 0 === strpos( $link, $home ) )
 unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );

这段代码其实是No Self Pings插件的核心代码。

  2Comments

  1. 含浩   •  

    “文章撰写页面的TrackBack框”在哪里的,我的怎么没有这个框呢?我用的是WordPress 3.3.1版的。可以给个大点的截图吗?

    • Jeriff Cheng   •     Author

      文章编辑页面,右上角的 显示选项,勾选 发送Tracback,就出现了这个设置框框。

Leave a Reply

Your email address will not be published. Required fields are marked *