这两天老是有小白,一些想通过不正当的 SEO 来获取自己 PR 的小白,看准了我的博客和网站的侧边栏最新评论用的是 Widget (就是 WordPress 默认的,至于为什么这么用,是因为可以用上缓存插件而已),就跑来留言,说的也没啥,无非是支持,顶之类的,然后,留下自己的垃圾站的网址就跑了,对于这种人渣,人肉 Spam,我是最讨厌的。

在 WordPress 的文章和页面中,评论者的链接默认是 no follow 的,所以对自己的 PR 毫无用处,而 Widget 调用的最新评论,确实没有 no follow ,这样就让一些投机的人钻了空子,不停评论,除了直接 spam 以外,能否通过自己修改文件来达到目的呢?答案是肯定的。

用非记事本打开 wp-includes\widgets.php ( WordPress 2.8 以前版本,WordPress 2.8 的话是wp-includes\default-widgets.php)文件,搜索 get_comment_author_link() ,如果以前没修改过,应该只有一个,然后把 get_comment_author_link() 修改为 get_comment_author() ,然后刷新或者删除缓存,再看看首页,没有评论者的链接了吧,哎,对付人肉 Spam ,只能用这招,假如没人会可以为了 PR 而留言,我是很乐意把所有朋友的留言都直接放到首页,而且给你一个链接,呵呵。

话说,通过观察 wp-includes\widgets.php 文件,你会发现很多有趣的侧边栏东东,比如这个最新评论的重要部分代码是:

function wp_widget_recent_comments($args) {
global $wpdb, $comments, $comment;
extract($args, EXTR_SKIP);
$options = get_option(’widget_recent_comments’);
$title = empty($options['title']) ? __(’Recent Comments’) : apply_filters(’widget_title’, $options['title']);
if ( !$number = (int) $options['number'] )
$number = 5;
else if ( $number < 1 )
$number = 1;
else if ( $number > 15 )
$number = 15;
if ( !$comments = wp_cache_get( ‘recent_comments’, ‘widget’ ) ) {
$comments = $wpdb->get_results(”SELECT * FROM $wpdb->comments WHERE comment_approved = ‘1′ ORDER BY comment_date_gmt DESC LIMIT $number”);
wp_cache_add( ‘recent_comments’, $comments, ‘widget’ );
}
?>

    if ( $comments ) : foreach ( (array) $comments as $comment) :
    echo ‘

  • ’ . sprintf(__(’%1$s on %2$s’), get_comment_author_link(), ‘comment_ID) ) . ‘”>’ . get_the_title($comment->comment_post_ID) . ‘’) . ‘
  • ’;
    endforeach; endif;?>

怎么样?不喜欢用 widget 的同学可以发挥自己的聪明才智,导入到主题的 siderbar.php 里,那就可以实现不依靠任何插件或者 widget 就能显示最新评论了。

不过我还是推荐使用 widget ,因为可以配合 WP Widget Cache 插件来缓存,嗯,适合小流量的博客。