推荐个对付wordpress垃圾评论(针对机器人)的终极办法
in IT互联网 | 评论关闭前一段时间网站忽然多了大量垃圾评论,弄得数据库哗啦哗啦的涨到了百兆级别,话说我这么个小博客哪来这么大数据量!
然后找了不少防止垃圾评论的方法和插件,国内最典型的就是 验证码和中文字符判断了(也就是如果评论内容没有中文就判断为垃圾评论) ,当然还有一些变态的 比如让你算个数学题啊这些咱就不考虑了。(你说我留个言容易么我):
最终让我找到了 Willin kan 同志写的 Anti-Spam ;原理就是把评论内容表单替换掉了,机器人只会向默认不显示在页面上的表单提交数据,由此达到了防止机器人评论的目的。目前看来 效果是相当不错的,清净的有点不习惯还……
使用我的King-blog主题的童鞋不用更新了,里面已经包含了这个功能。
添加方式是:在你的主题文件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><textarea name="comment" cols="100%" rows="4" style="display:none"></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; //不管 Trackbacks/Pingbacks
//方法一: 直接挡掉, 将 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();
搞定。
关键词: 评论