最近几天有位小伙伴一直在群里问小编如何来屏蔽 WordPress 的垃圾评论,其实小编之前发过很多 WordPress 屏蔽的垃圾评论的方法,不过貌似最近出现了很多不同类型的垃圾评论,有中文的,有英文的,有日文的,甚至还有多国语言混合在一起。不过由于小编设置了很多层的评论限制所以一直没有遇到垃圾评论的骚扰,不过可苦了一些没有防范的小伙伴了。如果不是最近群里有位小伙伴一直在问小编这个事小编还真不知道现在垃圾评论这么猖狂了。好了闲话扯了那么多教程开始~
首先禁止一些带有非法词汇的评论提交到数据库,代码如下:
//禁止垃圾评论提交到数据库 function wxd_fuckspam($comment) { if( is_user_logged_in()){ return $comment;} //登录用户无压力... if( wp_blacklist_check($comment['comment_author'],$comment['comment_author_email'],$comment['comment_author_url'], $comment['comment_content'], $comment['comment_author_IP'], $comment['comment_agent'] )){ header("Content-type: text/html; charset=utf-8"); wp_die(' 您评论包含辱骂,过激或者违反法律等言论,或者您的 IP 已被加入黑名单,如有疑问请联系管理员处理!<a href="javascript:history.go(-1);"> 返回文章页</a> '); } else { return $comment; } } add_filter('preprocess_comment', 'wxd_fuckspam');
在主题的 functions.php 文件加入以上代码后然后在 WordPress 后台设置评论黑名单词汇如下图:
可能一些新人一下在还找不到在哪设置 WordPress 评论黑名单关键词。 (PS:登录后台后点击设置里面的讨论选项即可看到评论黑名单了。) 设置完评论黑名单后就能防住部分非法广告评论了,当然你也可以把一些经常发垃圾评论的 ip 加入到黑名单,这样就可以屏蔽该 IP 在你网站上评论了。
接下来是评论字数的限制,最近一些群发的中文垃圾评论都是事先采集好一些小说片段后者笑话片段然后带上网址批量群发到 WordPress 上,对于这种评论关键词黑名单就很难屏蔽住了,不过通过观察可以看出这类评论一般都是长篇大论的,所以我们可以限制评论的字数来达到屏蔽效果,代码如下:
//评论字数限制 function wxd_comment_length( $commentdata ) { $minCommentlength = 3; //最少字数限制 $maxCommentlength = 220; //最多字数限制 $pointCommentlength = mb_strlen($commentdata['comment_content'],'UTF8'); //mb_strlen 1 个中文字符当作 1 个长度 if ( $pointCommentlength < $minCommentlength ) { header("Content-type: text/html; charset=utf-8"); wp_die(' 抱歉,您的评论太短了,请至少输入' . $minCommentlength .'个字 (已输入'. $pointCommentlength .'个字)<a href="javascript:history.go(-1);"> 返回文章页</a> '); exit; } if ( $pointCommentlength > $maxCommentlength ) { header("Content-type: text/html; charset=utf-8"); wp_die(' 抱歉,您的评论太长了,请少于' . $maxCommentlength .'个字 (已输入'. $pointCommentlength .'个字)<a href="javascript:history.go(-1);"> 返回文章页</a> '); exit; } return $commentdata; } add_filter( 'preprocess_comment', 'wxd_comment_length' );
加上评论字数限制以及关键词屏蔽后已经可以屏蔽大部分垃圾评论了,但是部分比较短的英文评论和日语评论还是屏蔽不了,其实我们可以让评论必须包含中文且不包含日文,即可屏蔽这类垃圾评论了,代码如下:
function wxd_comment_post( $incoming_comment ) { $pattern = '/[一-龥]/u'; $jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u'; if(!preg_match($pattern, $incoming_comment['comment_content'])) { header("Content-type: text/html; charset=utf-8"); wp_die( " 写点汉字吧,博主外语很捉急! Please write some chinese words!<a href='javascript:history.go(-1);'> 返回文章页</a> "); exit; } if(preg_match($jpattern, $incoming_comment['comment_content'])){ header("Content-type: text/html; charset=utf-8"); wp_die( " 日文滚粗!Japanese Get out!日本語出て行け!<a href='javascript:history.go(-1);'> 返回文章页</a> "); exit; } return( $incoming_comment ); } add_filter('preprocess_comment', 'wxd_comment_post');
将以上方法一起时候后基本上随机的群发的垃圾评论已经骚扰不到你了,不过要是有人针对你的站,特意的制造垃圾评论的话那就要依靠服务器来屏蔽 UA 来预防了。
最后说下以上代码都是加到当前使用的主题的 functions.php 文件里即可~
差点忘了说如果你们使用的是 Ajax 无刷新评论的话要把函数里的 wp_die 替换为 err
以下是几篇相关的文章,大家也可以配合本文中的方法一起使用:
WordPress 防采集防恶意爬虫的一点思路 (PS: 此文提到了判断 UA 的方法)
WordPress 屏蔽所有非中文系语种垃圾评论的方法 (PS: 此文介绍的是根据评论语系来屏蔽垃圾评论)