最近为 SPAM 的事情烦透了,虽然每天的 SPAM 信息不多,但是也很烦人,还特意写了一篇文章《老子受不了你们了》来解解气。

虽然很多 SPAM 都是被丢进了垃圾评论中,但是每天看到垃圾评论中有垃圾心里很不爽。后台有个评论黑名单的功能,但是我觉得没什么作用。比如你把 xxoo@xxoo.com 这个邮箱加进了黑名单,WP前台并不能阻止这条评论写进数据库,他只是会把这条评论列为垃圾放在垃圾评论中,个人觉得这个功能有些鸡肋。

前几天想到一个办法,就是当用户提交的评论写到数据库之前,进行一次判断,看看黑名单中是否有这些信息,如果有的话那么就返回,不写入数据库,没有的话就正常的执行。想法我觉得蛮好,但是就是TM不会PHP,郁闷了。昨天在本地用 JavaScript 写了一个,效果倒是实现了,可惜操作起来非常的麻烦,因为黑名单并不能从数据库中读取出来,而是用一个数组保存的,然后再一个个匹配,这样的执行效率很低。

今天又闲着蛋疼,认真的折腾一下,发现用 PHP 实现起来也不是很难,当然这只是相对于我的博客,因为我的博客评论方式是 AJAX 的。虽然不会 PHP ,但是看懂一些代码还是没问题的,其实这个功能的实现也基本不难,就只是写一条 SQL 语句,然后再判断一下就搞定了。

效果如下图,提交后,访客的昵称、EMAIL、网址出现在黑名单中的话,就会出现提示。

废话了那么多,开始正题,我的评论 Ajax 效果是出自《使用 jQuery 实现 wordpress 的 Ajax 留言》,修改的文件也是这篇文章中所新增加的 comments-ajax.php 文件。

整个也就一个步骤,把下列代码加入到文件中,具体什么位置你看着办吧,我是加在了评论不能为空的判断之后。

$spam = "SELECT COUNT(*) FROM $wpdb->options WHERE option_name = 'blacklist_keys' AND (option_value like '%".$comment_author."%' or option_value like '%".$comment_author_email."%' or option_value like '%".$comment_author_url."%')";
if($wpdb->get_var($spam)){
    fail('对不起,您的信息已经被列入黑名单,如有疑问请联系博主。');
}

至于其他的修改方法我也不知道怎么弄了,这只是给大家一个参考。

另外给大家推荐一个插件:《WordPress插件:Spam_To_Blacklist》,其作用就是把评论列为垃圾的时候,会把相关信息自动添加到黑名单中。