貌似 Willin 现在不用 WordPress 了, 网站也正在维护, 小墙代码我就贴在下面. 使用方法很简单, 拷贝到 function.php 文件最后即可. 其中 wall 是隐藏关键字, 有需要的请自行更改 (不改也可以).
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=$2wall$3$4/textarea><textarea name=\"comment\" cols=\"50\" rows=\"4\" style=\"display:none\"></textarea>",$input);') ); } } //檢查 function gate() { ( !empty($_POST['wall']) && empty($_POST['comment']) ) ? $_POST['comment'] = $_POST['wall'] : $_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']; */ // MG12 的處理方法 $is_ping = in_array( $comment['comment_type'], array('pingback', 'trackback') ); if(!$is_ping) { die(); } } return $comment; } } new anti_spam();
计算前端处理时间
在输入框上方用 JavaScript 取一个时间戳作为全局变量, 在提交表单的时候获取提交时间, 两个时间相减, 如果小于可能值, 则视为机器人. 判断为机器人的评论你可以按小墙的方式处理, 也可以不处理 (不占用服务器资源, 但不能记录 spam 信息).
相对与小墙, 这种方法更加可靠, 但绝不是没有漏洞, 只要 spammer 做个 setTimeout 延迟发布就破了.
时间戳
老掉牙的方机器人方法, 很实用, 但有最大的缺点: 用户体验不好. 要求访客多填一个很难观察的数字, 严重打压评论者积极性. WordPress 平台有很多这类插件可以用, 但我是不建议使用的.
标签:WordPress
相关阅读 >>
自己做wordpress评论插件修改评论样式(两步美化评论内容)
更多相关阅读请进入《wordpress》频道 >>