网站开始有了流量,垃圾评论也随之而来。如果被国外的垃圾留言机器人,一天可能就会被刷上几十条垃圾评论,手动删除都来不及。WordPress预防垃圾评论的功能就显得刻不容缓了。
第一重防御:插件级防御
Akismet Akismet 是WordPress平台十分著名的预防垃圾评论插件,在安装WP时会跟随系统自动安装,只需要在开发商的网站上注册一下获取API KEY并且填入到WP后台的Akismet设置中即可使用,甚至不需要额外的设置便能轻而易举地抵御绝大部分的垃圾评论。
在我使用Akismet的过程中,其总共替我过滤了9497条垃圾评论,准确率98.43%,其中有102条漏判,69条误判,防止垃圾评论的效率还是非常高的。这些数据在Akismet插件的设置页面都有清晰的显示,让用户知道自己的WP网站曾经怎样被垃圾评论“轰炸”过。
第二重防御:代码级防御
WordPress具有非常强大的可定制能力,如果你有丰富的编程经验完全可以自己设计一套独特的预防垃圾评论方式,按照自己的意愿过滤筛选所有的评论。当然,如果你只是专注于用WP写作,同时想预防泛滥难以遏制的垃圾评论,那么完全可以使用网上“折腾”WP前辈们留下的代码达到自己防止垃圾评论的目的。
// 垃圾评论拦截
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;
//方法一: 直接挡掉, 將 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();
//--END-----------
只需要将以上代码复制粘贴到functions.php文件最后,便能实现轻松抵御垃圾评论的泛滥。在这段代码的注释部分可以看到有两种方式过滤垃圾评论,使用者可以根据自己的需要选择其中一种,顺便注释掉另外一种即可。
以上两种抵御垃圾评论的方式采用其中任意一种效果都非常明显,双管齐下的预防效果更是锦上添花。
如果爱,请赞赏
阅读相关文章:
本文地址:https://www.stylefanr.org/archives/1593
除非注明,文章均为原创,转载请注明出处和链接!
我之前用了英文的评论验证码,发现还是有国外那种类似广告的评论,现在换成中文验证码,不知道会不会好些。
一个插件可以完全搞定
直接在.htaccess里限制WP-POST文件外部请求就可以了,不用这么麻烦
.htaccess文件原来这个功能,又学习了,多谢!
哎、我的小站也有人搞垃圾评论、真心烦躁的说
试过插件很难挡,直接屏蔽IP段
每天都要收到几十上条垃圾评论,烦不胜烦。
通过请求来判断?
如果能百分百管用就好了
百分百过滤对机器来说实在太难,除非人肉过滤。