转换为语音并朗读全文 00:00 / 00:00

大家知道wordpress黑名单的评论会被自动标记为垃圾评论, 这个做法我感觉挺浪费资源的, 毕竟垃圾评论还是写入了数据库, 如果集中时间段被大量spam攻击, 这种黑名单机制对保护数据库无济于事。
然后我写了个函数, 效果是直接拒绝符合黑名单条件的评论发表, 评论不会写入数据库。

方法A:把以下代码扔到functions.php

function xhd_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");
        exit('草你麻痹垃圾评论滚粗');
    }  else  {
        return $comment; 
    }
} 
add_filter('preprocess_comment', 'xhd_fuckspam');

方法B:以下代码扔到comments-ajax.php

(随便找个地方,比如检查评论太快那段函数后面)
 if( wp_blacklist_check($comment_author,$comment_author_email,$comment_author_url, $comment_content )&&!is_user_logged_in()){//登录用户还是无压力...
        err(__('草你麻痹垃圾评论滚粗'));   
    }

两个方法效果和原理略有不同

方法A:click submit→POST出去→收到拒绝信息 exit→return→ 会清空评论框内容并重置提交时间间隔 == submit了一次

优点:杀毒彻底

方法B:click submit→POST被拒绝→return→ 会保留评论框内容 == 没有submit过

优点:评论者省时省力, 我是用此法来拒绝纯英文评论的, 因为此类误判几率大, 省得好人们重新再评论一次了;
由于没有POST出去, 所以相对而言对数据库压力最小;

缺点:由于comments-ajax是从表单内直接提取$_POST的的字段,所以无法匹配IP和agent类黑名单

效果图:20130526141752

可以自行测试, 方法: 把你在这里评论时的昵称改成带

rubbish

的, (这些都已经in_array在本站黑名单了) 然后提交评论, 剩下来的你们就自己感受吧。

如果你觉得文章不错,可以给点小小奖励~

微信

微信

支付宝

支付宝

带符号 * 的表示必填项
  1. 大肥羊
    大肥羊

    这个拦截不了ip的

    回复
  2. MaverickChan
    MaverickChan

    我发现了,我用ru**bbsih测试了以后,就算换成别的用户名,ip就被ban掉了,但是不知道ban多久?楼主,在你这边的评论都没了~

    回复
  3. MaverickChan
    MaverickChan

    为什么:垃圾评论滚出 我在自己的博客评论却没有显示?囧~但是有倒计时评论~

    回复
  4. MaverickChan
    MaverickChan

    我这句话:草你麻痹垃圾评论滚粗 不显示咋整~

    回复
  5. MaverickChan
    MaverickChan

    程序员解救全人类~喵~

    回复
  6. Youth.霖
    Youth.霖

    暂时没有很多垃圾评论

    回复
  7. dqrwqrfqwrew
    dqrwqrfqwrew

    挺好的一个功能,赞一个。

    回复
  8. d
    d

    挺好的一个功能,赞一个。

    回复