首页 > CMS > Wordpress > 正文

WordPress将垃圾评论阻挡在门外

2024-09-07 00:50:34
字体:
来源:转载
供稿:网友

垃圾评论是各位wordpress博客主的一个头痛的问题当然也包括了我了,现在我整理了一些关于垃圾评论的防止方法,希望这些代码能帮助各位解决头痛之事呀.

今天,翼帆远航将介绍两种把垃圾评论阻挡在门外的方法。

一般情况下,我们会使用著名的反垃圾评论插件:Akismet 来阻止垃圾评论的入侵,Akismet 会将所有识别出的垃圾评论分离出来,并提供一键清理垃圾评论的功能,虽然 Akismet 几乎能够 100% 识别出垃圾评论,但由于每天的垃圾评论实在太多,天天点“一键清理”也不是办法,有没有更加实用的解决方案,能将垃圾评论在提交之前先拦截下来呢?

我们先来分析垃圾评论的类型:

纯英文或含有日文、韩文等他国语言的垃圾评论

固定某个网站用于推广的垃圾评论

对于这两类垃圾评论,我们对症下药,使用两种方法,分别将这两类垃圾评论阻挡在门外。

 

方法一:不允许纯英文或包含日文、韩文等他国语言的评论提交

将以下代码插入主题目录 functions.php 的合适位置:

  1. // 禁止全英文和日文评论 
  2. function v7v3_comment_post( $incoming_comment ) { 
  3.     $pattern = '/[一-?]/u'
  4.     $jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u'
  5.     if(!preg_match($pattern$incoming_comment['comment_content'])) { 
  6.         err( "写点汉字吧,博主外语很捉急! Please write some chinese words!" ); 
  7.     } 
  8.     if(preg_match($jpattern$incoming_comment['comment_content'])){ 
  9.         err( "日文滚粗!Japanese Get out!日本?出て行け!" ); 
  10.     } 
  11.     return$incoming_comment ); 
  12. add_filter('preprocess_comment''v7v3_comment_post'); 

温馨提示:若使用以上代码出现异常,请尝试将第 6 行和第 9 行的 err 换成 wpdie。

方法二:阻止含有违禁关键字的评论提交

将以下代码插入主题目录 functions.php 的合适位置:

  1. // 禁止包含违禁关键字的评论提交到数据库 
  2. function v7v3_fuckspam($comment)  
  3.     if (is_user_logged_in()) 
  4.     {  
  5.         return $comment
  6.     }   
  7.     if (wp_blacklist_check( 
  8.                             $comment['comment_author'], 
  9.                             $comment['comment_author_email'], 
  10.                             $comment['comment_author_url'],  
  11.                             $comment['comment_content'],  
  12.                             $comment['comment_author_IP'],  
  13.                             $comment['comment_agent']  
  14.                         )) 
  15.     { 
  16.         header("Content-type: text/html; charset=utf-8"); 
  17.         err(' 
  18.                 您的评论包含违禁关键字,或者您的IP已被加入黑名单,如有疑问请联系管理员处理! 
  19.             '); 
  20.     }   
  21.     else   
  22.     { 
  23.         return $comment
  24.     } 
  25. add_filter('preprocess_comment''v7v3_fuckspam'); 

温馨提示:若使用以上代码出现异常,请尝试将第 6 行和第 9 行的 err 换成 wpdie。

违禁关键字的设置在“仪表盘——设置——讨论——评论黑名单”,一个违禁关键字占一行,此方法依旧是来自 Willin Kan 大师(可惜他已经退出WordPress圈),折腾很简单,直接将下面的代码放到主题的functions.php文件的最后一个 ?>前面即可

代码如下:

  1. / 垃圾评论拦截 
  2. class anti_spam { 
  3.  function anti_spam() { 
  4.   if ( !current_user_can('level_0') ) { 
  5.    add_action('template_redirect'array($this'w_tb'), 1); 
  6.    add_action('init'array($this'gate'), 1); 
  7.    add_action('preprocess_comment'array($this'sink'), 1); 
  8.   } 
  9.  } 
  10.  function w_tb() { 
  11.   if ( is_singular() ) { 
  12.    ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=(["'])comment(["'])(.+)/textarea>#"
  13.     "textarea$1name=$2w$3$4/textarea><textarea name="comment" cols="100%" rows="4" style="display:none"></textarea>",$input);') ); 
  14.   } 
  15.  } 
  16.  function gate() { 
  17.   if ( !emptyempty($_POST['w']) && emptyempty($_POST['comment']) ) { 
  18.    $_POST['comment'] = $_POST['w']; 
  19.   } else { 
  20.    $request = $_SERVER['REQUEST_URI']; 
  21.    $referer = isset($_SERVER['HTTP_REFERER'])         ? $_SERVER['HTTP_REFERER']         : '隐瞒'
  22.    $IP      = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透过代理)' : $_SERVER["REMOTE_ADDR"]; 
  23.    $way     = isset($_POST['w'])                      ? '手动操作'                       : '未经评论表格'
  24.    $spamcom = isset($_POST['comment'])                ? $_POST['comment']                : null; 
  25.    $_POST['spam_confirmed'] = "请求: "$request"n来路: "$referer"nIP: "$IP"n方式: "$way"n?热? "$spamcom"n -- 记录成功 --"
  26.   } 
  27.  } 
  28.  function sink( $comment ) { 
  29.   if ( !emptyempty($_POST['spam_confirmed']) ) { 
  30.    if ( in_array( $comment['comment_type'], array('pingback''trackback') ) ) return $comment
  31.    //方法一: 直接挡掉, ? die(); 前面两斜线?h除即可. 
  32.    die(); 
  33.    //方法二: 标记为 spam, 留在资料库检查是否误判. 
  34.    //add_filter('pre_comment_approved', create_function('', 'return "spam";')); 
  35.    //$comment['comment_content'] = "[ 小墙判断这是 Spam! ]n". $_POST['spam_confirmed']; 
  36.   } 
  37.   return $comment
  38.  } 
  39. $anti_spam = new anti_spam(); 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表