当前位置:首页 > CMS教程 > WordPress > 列表

Wordpress自动将包含长链接的评论标记为垃圾评论

发布:smiling 来源: PHP粉丝网  添加日期:2014-03-18 14:40:27 浏览: 评论:0 

现在大量的机器可以直接对WordPress博客进行评论并带有大量的连接,这些带链接评论我们定为垃圾评论了,下面我来给大家介绍几款自动将包含长链接的评论标记为垃圾评论实例.

方法一:此方法依旧是来自 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.  } 
  40.  $anti_spam = new anti_spam(); 

这个方法可以阻止98%以上的垃圾评论,当然了,倡萌还建议你审核第一次提交的评论人的评论,设置审核后才显示,如果遇到垃圾评论,将其email、IP、网址等添加到黑名单即可,下面是倡萌目前的评论设置,你可以在WP后台-设置-讨论下设置.

方法二:自动拒绝包含特定关键词的垃圾评论,将下面的代码添加到主题的functions.php文件,自己根据需要,修改 $ bad_comment_content 数组的内容,任何包含在$ bad_comment_content 数组内的字符,将会被自动拒绝留言,代码如下:

  1. function in_comment_post_like($string$array) {    
  2.     foreach($array as $ref) { if(strstr($string$ref)) { return true; } }    
  3.     return false;   
  4. }   
  5. function drop_bad_comments() {   
  6.     if (!emptyempty($_POST['comment'])) {   
  7.         $post_comment_content = $_POST['comment'];   
  8.         $lower_case_comment = strtolower($_POST['comment']);   
  9.         $bad_comment_content = array(   
  10.             'viagra',    
  11.             'hydrocodone',   
  12.             'hair loss',   
  13.             'xanax',   
  14.             'tramadol',   
  15.             'russian girls',   
  16.             'russian brides',   
  17.             'lorazepam',   
  18.             'adderall',   
  19.             'dexadrine',   
  20.             'no prescription',   
  21.             'oxycontin',   
  22.             'without a prescription',   
  23.             'sex pics',   
  24.             'family incest',   
  25.             'online casinos',   
  26.             'online dating',   
  27.             'cialis',   
  28.             'best forex',   
  29.             'amoxicillin'   
  30.         );   
  31.         if (in_comment_post_like($lower_case_comment$bad_comment_content)) {   
  32.             $comment_box_text = wordwrap(trim($post_comment_content), 80, "n  ", true);   
  33.             $txtdrop = fopen('/var/log/httpd/wp_post-logger/nullamatix.com-text-area_dropped.txt''a');   
  34.             fwrite($txtdrop"  --------------n  [COMMENT] = " . $post_comment_content . "n  --------------n");   
  35.             fwrite($txtdrop"  [SOURCE_IP] = " . $_SERVER['REMOTE_ADDR'] . " @ " . date("F j, Y, g:i a") . "n");   
  36.             fwrite($txtdrop"  [USERAGENT] = " . $_SERVER['HTTP_USER_AGENT'] . "n");   
  37.             fwrite($txtdrop"  [REFERER  ] = " . $_SERVER['HTTP_REFERER'] . "n");   
  38.             fwrite($txtdrop"  [FILE_NAME] = " . $_SERVER['SCRIPT_NAME'] . " - [REQ_URI] = " . $_SERVER['REQUEST_URI'] . "n");   
  39.             fwrite($txtdrop'--------------**********------------------'."n");   
  40.             header("HTTP/1.1 406 Not Acceptable");   
  41.             header("Status: 406 Not Acceptable");   
  42.             header("Connection: Close");   
  43.             wp_die( __('bang bang.') );   
  44.         }   
  45.     }   
  46. }   
  47. add_action('init''drop_bad_comments'); 

今天再补充下,自动将包含长链接的评论标记为垃圾评论,将下面的代码添加到主题的 functions.php 文件即可:

  1. function rkv_url_spamcheck( $approved , $commentdata ) { 
  2.     return ( strlen$commentdata['comment_author_url'] ) > 50 ) ? 'spam' : $approved
  3.   } 
  4.  add_filter( 'pre_comment_approved''rkv_url_spamcheck', 99, 2 ); 

注意看第二行的 50,根据自己的需要修改这个数值,如果你希望将所有带有链接(不管是否是长链接)的评论内容都自动标记为垃圾评论,将 50 改为 1 即可.

Tags: Wordpress 长链接 垃圾评论

分享到: