WordPress 博主使用的防spam插件应该一般都是Akismet插件,该插件是WP默认附带的,官方推荐,说明效果应该很好,博客吧目前使用的也是Akismet插件。喜欢代码流的WordPress博主对插件通常能不用则不用,很久前博客吧发现一篇关于代码替代Akismet插件防spam的,现在转载过来分享下。
代码介绍:
据说该代码是一位willin写的,博客吧前面也转载有该作者的两篇文章,非代码实现AJAX评论效果和非插件实现评论邮件通知功能。
该代码适用的版本不详,不过应该没有版本限制。
代码使用方法:
- 登陆博客后台,点击“外观”选项卡下的“编辑”选项进入主题编辑界面
- 选择functions.php文件进行编辑,在<?php和?>之间添加以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
/* ----------------------------------------------- <<小牆>> Anti-Spam v1.8 by Willin Kan. */ //建立 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><textarea name=\"comment\" cols=\"100%\" rows=\"4\" style=\"display:none\"></textarea>",$input);') ); } } //檢查 function gate() { ( !empty($_POST['w']) && empty($_POST['comment']) ) ? $_POST['comment'] = $_POST['w'] : $_POST['spam_confirmed'] = 1; } //處理 function sink( $comment ) { if ( !empty($_POST['spam_confirmed']) ) { //方法一:直接擋掉, 將 die(); 前面兩斜線刪除即可. //die(); //方法二:標記為spam, 留在資料庫檢查是否誤判. add_filter('pre_comment_approved', create_function('','return "spam";')); $is_ping = in_array( $comment['comment_type'], array('pingback', 'trackback') ); $comment['comment_content'] = ( $is_ping ) ? "◎ 這是 Pingback/Trackback, 小牆懷疑這可能是 Spam!\n" . $comment['comment_content'] : "[ 小牆判斷這是Spam! ]\n" . $comment['comment_content']; } return $comment; } } $anti_spam = new anti_spam(); // -- END ----------------------------------------
- 保存更新文件即可。
提示:willin的该篇文章的地址博客吧不知道,所以就添加转来的博客的地址,知道的可以留言通知一下。代码来自:
http://blog.haitianhome.com/akismet-xiaoqiang.html
提醒:该代码(方法)博客吧并没有实践,所以不清楚其效果如何。代码流的朋友可以研究一翻。