现在的位置: 首页 > Wordpress > WP技巧 > 正文
WordPress 垃圾评论处理方法
2012年11月18日 WP技巧 ⁄ 共 4439字 评论数 17 ⁄ 被围观 11,502+

好久没有折腾 WordPress 程序本身了,突然发现后台的垃圾评论竟然已经有一千八百多条了,而我本身是安装了 Akismet 反垃圾评论的插件的。可见虽然 Akismet 自诩“对大多数人来说,Akismet 将大量减少甚至彻底消灭垃圾评论和不良 trackback 引用通告。即使有漏网之鱼,您只需将其标成“垃圾评论”,然后 Akismet 会自动从失误中学习。”,效果还是非常有限的。

wordpress spam 1

wordpress spam 2

从上面的垃圾评论内容来看,无外乎两大类,一类是纯鸟语(英语或其他非汉语语种),一类是太水了的灌水(本站不排除灌水,但至少有点意义)。既然源头找到了,那就要寻求解决的方案。根据实际使用情况,可以通过以下几个方面的操作吧垃圾评论减少到最低。

【一、Akismet 插件反垃圾评论】

虽说 Akismet 只能起到拦截作用,而根本阻止不了垃圾评论,但是其作用还是不可小觑,否则垃圾评论泛滥,岂不影响阅读。关于此插件的安装使用,这里就不用多说了,因为这是 WordPress 自带的插件之一,只要按照说明启用就可以了。

【二、判断有无中文字符反垃圾评论】

原理是判断评论内容是否包含汉字,如果一个汉字都没有,则给出错误提示,评论无法提交,这样垃圾评论也没有存储到数据库中,达到了屏蔽英文垃圾评论的目的。这个对于纯鸟语类的垃圾评论非常有效,也省了进后台数据库需要手动清理的过程。

操作的方法是打开当前使用的主题目录下的 functions.php ,将第一个 < *php(*为?)替换成: [php] <?php function scp_comment_post( $incoming_comment ) { $pattern = '/[一-龥]/u'; // 禁止全英文评论 if(!preg_match($pattern, $incoming_comment['comment_content'])) { wp_die( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" ); } return( $incoming_comment ); } add_filter('preprocess_comment', 'scp_comment_post'); [/php] 注意要在 wordpress 后台修改或者通过 notepad 等工具修改,保存为 utf-8 格式,否则容易出错。 【三、小墙工具反垃圾评论】 Willin Kan 写的小墙工具,理论上可以 100% 屏蔽自己人发出的 spam。如果是自然人提交评论,小墙会在评论提交表单中加一个 hidden 变量,如果后台检测不到这个变量,则认定为 spam,可以选择需要审核,也可以直接过滤掉。 如果对方知道你用的 hidden 变量或者使用虚拟点击,就可以破掉小墙。但是 spam 本来就是小成本和以量取胜的事情,除非与你与 spammer 结仇了,我相信人家不会那么无聊来破你小墙。而且机器人 spam 的数量占了绝大多数。这个工具很有必要。 貌似 Willin 现在不用 WordPress 了,网站也正在维护,小墙代码我就贴在下面。使用方法很简单,拷贝到 function.php 文件最后即可。 [php] /* <<小牆>> Anti-Spam v1.84 by Willin Kan. */ class anti_spam { function anti_spam() { if ( !current_user_can('read') ) { 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() ) { // 非中文語系 if ( stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh') === false ) { add_filter( 'comments_open', create_function('', "return false;") ); // 關閉評論 } else { ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)/textarea>#", "textarea$1name=$2w$3$4/textarea><textarea name=\"comment\" cols=\"100%\" rows=\"4\" style=\"display:none\"></textarea>",$input);') ); } } } // 檢查 function gate() { $w = 'w'; if ( !empty($_POST[$w]) && empty($_POST['comment']) ) { $_POST['comment'] = $_POST[$w]; } else { $request = $_SERVER['REQUEST_URI']; $way = isset($_POST[$w]) ? '手動操作' : '未經評論表格'; $spamcom = isset($_POST['comment']) ? $_POST['comment'] : ''; $_POST['spam_confirmed'] = "請求: ". $request. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 記錄成功 --"; } } // 處理 function sink( $comment ) { // 不管 Trackbacks/Pingbacks if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment; // 已確定為 spam if ( !empty($_POST['spam_confirmed']) ) { // 方法一: 直接擋掉, 將 die(); 前面兩斜線刪除即可. //die(); // 方法二: 標記為 spam, 留在資料庫檢查是否誤判. add_filter('pre_comment_approved', create_function('', 'return "spam";')); $comment['comment_content'] = "[ 小牆判斷這是Spam! ]\n". $_POST['spam_confirmed']; $this->add_black( $comment ); } else { // 檢查頭像 $f = md5( strtolower($comment['comment_author_email']) ); $g = sprintf( "http://%d.gravatar.com", (hexdec($f{0}) % 2) ) .'/avatar/'. $f .'?d=404'; $headers = @get_headers( $g ); if ( !preg_match("|200|", $headers[0]) ) { // 沒頭像的列入待審 add_filter('pre_comment_approved', create_function('', 'return "0";')); //$this->add_black( $comment ); } } return $comment; } // 列入黑名單 function add_black( $comment ) { if (!($comment_author_url = $comment['comment_author_url'])) return; if ($pos = strpos($comment_author_url, '//')) $comment_author_url = substr($comment_author_url, $pos + 2); if ($pos = strpos($comment_author_url, '/')) $comment_author_url = substr($comment_author_url, 0, $pos); $comment_author_url = strtr($comment_author_url, array('www.' => '')); if (!wp_blacklist_check('', '', $comment_author_url, '', '', '')) update_option('blacklist_keys', $comment_author_url . "\n" . get_option('blacklist_keys')); } } $anti_spam = new anti_spam(); // -- END ---------------------------------------- [/php] 注意点:如果你只是 copy 代碼去用,那只是基本運用而已,還是會被破解的。命名應該有所變化,人人都不同,讓 spammer 找不到規律。 举例: 小墙用 name=’w’ 為評論欄,你可改為 a、b2、c3f7、text543col、spam987。。。只要首字為英文,其它字元符合命名規則的都可以。大家用的欄位名都不一樣,誰會知道該填哪一格,自然不易被破解。 否則 spam 設定填入 ‘w’ 的話,全部用 ‘w’ 的小牆要全倒。要改的位置有兩個:一個是 18 行 $2w$3 中間的 w,一個是 24 行 $w = ‘w’;後面的 w,改的兩個字串要完全一樣。 【四、验证码反垃圾评论】 很传统的一个方法,就是评论前增加一个验证码,可以是一串数字、一个算式或是几个字母,相关的功能一般通过插件即可实现。个人不是很喜欢这样的方式,因为对于 WordPress 来说,评论前已经要填写昵称、邮件、网址的信息了,再增加一个验证,用户体验极其不好。因为不是所有博主都有记录 cookie 的功能,也很少人会用火狐插件easycommentChrome扩展应用:LastPass自动填写表单及密码管理来实现自动填充。

【五、登录后评论反垃圾评论】

此法和第四种可谓异曲同工,有人喜欢有人不喜欢。此类插件现如今比较流行,比如多说、比如灯鹭、比如点点。不过对于我来说,还是不喜欢。也就是说强加给我的,我可以选择不要。

除了上述几个方面可以防止或减少垃圾评论之外,其实 WordPress 自身也有反垃圾措施——评论审核以及黑名单。具体设置在“设置”——“讨论”里,其功能也是异常巨大的,但是为了省事以及避免误删,通常我们都选择了默认,有需要的也可以自行去设置。综上,对于 WordPress 垃圾评论的处理方法是比较多的,通常需要几方面结合起来才能达到最终所需要的结果。就个人而言,准备上马小墙工具,相信有了 Akismet 以及小墙,应该可以抵制垃圾评论了。



目前有 17 条留言 其中:访客:17 条, 博主:0 条

  1. 垃圾站 : 2012年11月19日18:06:13  11楼

    禁止全英文评论很好,不过有的垃圾评论还会带一些日语和汉字,都会带链接……

  2. 刘晓林 : 2012年12月20日14:54:25  12楼

    我好像直接删除就行了


如果觉得文章或者网站对您有帮助请点击 向TA付款 捐赠作者或者点击下面的分享按钮支持作者

更多

给我留言

留言无头像?

无觅相关文章插件,快速提升流量

×