Ryan

WORDPRESS全面禁止非中文的垃圾评论
换了Minty主题好几天了,当然,博主在换主题的时候就已经加入了屏蔽垃圾评论的代码,但是貌似以前一直在用的代码这几...
扫描右侧二维码阅读全文
06
2014/02

WORDPRESS全面禁止非中文的垃圾评论

换了Minty主题好几天了,当然,博主在换主题的时候就已经加入了屏蔽垃圾评论的代码,但是貌似以前一直在用的代码这几天不怎么管用了,原来是垃圾评论升级了,不单单是英文的了,中文也不少,更有日文的,甚至还有多国语言混合在一起的。

首先禁止一些带有非法词汇的评论提交到数据库,代码如下:

  1. //禁止垃圾评论提交到数据库 
  2. functionv7v3_fuckspam($comment) {  
  3.    if(  is_user_logged_in()){return $comment;}//登录用户无压力... 
  4.          
  5.    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'] )){  
  6.         header("Content-type: text/html; charset=utf-8");  
  7.         wp_die('  
  8. 您评论包含辱骂,过激或者违反法律等言论,或者您的IP已被加入黑名单,如有疑问请联系管理员处理!<a href="javascript:history.go(-1);">返回文章页</a>  
  9. ');  
  10.     } else  {  
  11.        return $comment;  
  12.     }  
  13. }  
  14. add_filter('preprocess_comment', 'v7v3_fuckspam'); 

在主题的functions.php文件加入以上代码后然后在wordpress后台设置评论黑名单词汇如下图:

fuck_spamer

可能一些新人一下在还找不到在哪设置wordpress评论黑名单关键词。(PS:登录后台后点击设置里面的讨论选项即可看到评论黑名单了。)设置完评论黑名单后就能防住部分非法广告评论了,当然你也可以把一些经常发垃圾评论的ip加入到黑名单,这样就可以屏蔽该IP在你网站上评论了(更甚者可以直接使用ip deny直接禁止访问你的wordpress)。

接下来是限制评论字数,最近一些群发的中文垃圾评论都是事先采集好一些小说片段后者笑话片段然后带上网址批量群发到wordpress上,评论关键词黑名单就很难屏蔽这类型的评论了,不过可以观察出这类评论一般都是长篇大论的,所以我们可以限制评论的字数来达到屏蔽效果,代码如下:

  1. //评论字数限制 
  2. functionv7v3_comment_length($commentdata) {  
  3. $minCommentlength= 3;//最少字数限制 
  4. $maxCommentlength= 220;//最多字数限制 
  5. $pointCommentlength= mb_strlen($commentdata['comment_content'],'UTF8');//mb_strlen 1个中文字符当作1个长度 
  6. if($pointCommentlength<$minCommentlength)  
  7. {  
  8. header("Content-type: text/html; charset=utf-8");  
  9. wp_die('  
  10. 抱歉,您的评论太短了,请至少输入' .$minCommentlength.'个字(已输入'.$pointCommentlength.'个字)<a href="javascript:history.go(-1);">返回文章页</a>  
  11. ');  
  12. exit;  
  13. }  
  14. if($pointCommentlength>$maxCommentlength)  
  15. {  
  16. header("Content-type: text/html; charset=utf-8");  
  17. wp_die('  
  18. 抱歉,您的评论太长了,请少于' .$maxCommentlength.'个字(已输入'.$pointCommentlength.'个字)<a href="javascript:history.go(-1);">返回文章页</a>  
  19. ');  
  20. exit;  
  21. }  
  22. return $commentdata;  
  23. }  
  24. add_filter( 'preprocess_comment', 'v7v3_comment_length' ); 

加上评论字数限制以及关键词屏蔽后已经可以屏蔽大部分垃圾评论了,但是部分比较短的英文评论和日语评论还是屏蔽不了,其实我们可以让评论必须包含中文且不包含日文,即可屏蔽这类垃圾评论了,代码如下:

  1. functionv7v3_comment_post($incoming_comment) {  
  2. $pattern= '/[一-龥]/u';  
  3. $jpattern='/[ぁ-ん]+|[ァ-ヴ]+/u';  
  4. if(!preg_match($pattern,$incoming_comment['comment_content'])) {  
  5. header("Content-type: text/html; charset=utf-8");  
  6. wp_die("
  7. 写点汉字吧,博主外语很捉急! Please write some chinese words!<a href='javascript:history.go(-1);'>返回文章页</a> 
  8. ");  
  9. exit;  
  10. }  
  11. if(preg_match($jpattern,$incoming_comment['comment_content'])){  
  12. header("Content-type: text/html; charset=utf-8");  
  13. wp_die("
  14. 日文滚粗!Japanese Get out!日本語出て行け!<a href='javascript:history.go(-1);'>返回文章页</a> 
  15. ");  
  16. exit;  
  17. }  
  18. return($incoming_comment);  
  19. }  
  20. add_filter('preprocess_comment', 'v7v3_comment_post'); 

将以上方法一起时候后基本上随机的群发的垃圾评论已经骚扰不到你了,不过要是有人针对你的站,特意的制造垃圾评论的话那就要依靠服务器来屏蔽UA来预防了。

最后说下以上代码都是加到当前使用的主题的functions.php文件里即可~

差点忘了说如果你们使用的是Ajax无刷新评论的话要把函数里的wp_die替换为err

VIA:http://v7v3.com/wpjiaocheng/201401527.html

搬瓦工年付$187机房套餐补货了,电信联通优化,512M内存/500G流量/1G带宽,建站稳定,优惠码:BWH1ZBPVK,【点击购买】!
搬瓦工年付$28CN2高速线路,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快,建站稳定,优惠码同上,【点击购买】!
Last modification:March 16th, 2016 at 05:11 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

11 comments

  1. bobo

    来试试:写点汉字吧,博主外语很捉急! Please write some chinese words!

  2. Youth.霖

    我就收到了多国混合语的垃圾评论 :-o

    1. Ryan
      @Youth.霖

      我现在剩下纯中文的垃圾评论了

      1. Youth.霖
        @Ryan

        提交评论一直显示正在提交,我还以为提交不了呢。。。

        1. Ryan
          @Youth.霖

          还是一直正在提交?

  3. 于尼玛

    垃圾评论真烦人

    1. Ryan
      @于尼玛

      是啊,最简单是用多说那类东西,但是不喜插件啊

  4. Pang

    嗯 这法子不错。 我就屏蔽了全英文和日文的 现在也没垃圾评论

  5. Jimmy

    其实也可以直接拒绝非中文浏览器用户评论

    1. Ryan
      @Jimmy

      算了,我还是这样就好了,因为我自己都经常用英文的ff

  6. 无纯洁

    Dick,够全面~