鏖炳馀 发表于 2024-6-19 14:25:53

WordPress屏蔽垃圾评论

最近一段时间被垃圾评论搞的头疼,要是隔几天没有登录后台的话,就会有上百条甚至几百条垃圾评论等待着你删除,因为评论里有一部分是真实的,所以在删除垃圾评论的过程中需要仔细一些,防止将读者的真实评论误删掉,有几次光清理垃圾评论就花了半小时左右的时间,让人叫苦连天啊。

    前段时间我写了一篇《如何屏蔽wordpress的垃圾英文评论》的文章,这个方法主要针对全英文的垃圾评论,如果垃圾评论里没有中文就会自动屏蔽,刚开始效果的确不错,几乎大部分的垃圾评论都屏蔽掉了(那段时间主要是英文垃圾评论),可后来好像专门跟我作对一样,英文里开始带中文了,而且频率越来越高,实在没办法,所以决心一定要找一个有效的方法把这些烦人的评论拦截掉。下面是垃圾评论的一些截图:

   



    在WordPress大学里,我找到了作者一直在用一个方法,据说可以屏蔽掉98%以上的垃圾评论,用了几天,效果确实不错,偶尔有几个漏网之鱼,手动删一下也不费事。方法:将下面这串代码粘贴到functions.php文件的最后一个 ?前面即可:

    // 垃圾评论拦截

    class anti_spam {

    function anti_spam() {

    if ( !current_user_can('level_0') ) {

    add_action('template_redirect', array($this, 'w_tb'), 1);

    add_action('init', array($this, 'gate'), 1);

    add_action('preprocess_comment', array($this, 'sink'), 1);

    }

    }

    function w_tb() {

    if ( is_singular() ) {

    ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)/textarea#",

    "textarea$1name=$2w$3$4/textarea",$input);') );

    }

    }

    function gate() {

    if ( !empty($_POST['w'])empty($_POST['comment']) ) {

    $_POST['comment'] = $_POST['w'];

    } else {

    $request = $_SERVER['REQUEST_URI'];

    $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '隐瞒';

    $IP = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透过代理)' : $_SERVER["REMOTE_ADDR"];

    $way = isset($_POST['w']) ? '手动操作' : '未经评论表格';

    $spamcom = isset($_POST['comment']) ? $_POST['comment'] : null;

    $_POST['spam_confirmed'] = "请求: ". $request. "\n来路: ". $referer. "\nIP: ". $IP. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 记录成功 --";

    }

    }

    function sink( $comment ) {

    if ( !empty($_POST['spam_confirmed']) ) {

    if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;

    //方法一: 直接挡掉, 將 die(); 前面两斜线刪除即可.

    die();

    //方法二: 标记为 spam, 留在资料库检查是否误判.

    //add_filter('pre_comment_approved', create_function('', 'return "spam";'));

    //$comment['comment_content'] = "[ 小墙判断这是 Spam! ]\n". $_POST['spam_confirmed'];

    }

    return $comment;

    }

    }

    $anti_spam = new anti_spam();

    除了使用这个方法,还可以结合WordPress本身自带的一些功能,比如设置指定关键词拦截,在设置-讨论下,将一些广告中使用频率较高的词汇写在里面,比如:广告、淘宝、垃圾、裸体、减肥、美容等,这些双管齐下,效果自然更佳。
页: [1]
查看完整版本: WordPress屏蔽垃圾评论