双管齐下预防WordPress垃圾评论

网站开始有了流量,垃圾评论也随之而来。如果被国外的垃圾留言机器人,一天可能就会被刷上几十条垃圾评论,手动删除都来不及。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文件最后,便能实现轻松抵御垃圾评论的泛滥。在这段代码的注释部分可以看到有两种方式过滤垃圾评论,使用者可以根据自己的需要选择其中一种,顺便注释掉另外一种即可。

以上两种抵御垃圾评论的方式采用其中任意一种效果都非常明显,双管齐下的预防效果更是锦上添花。


请用真金白银来赞赏
打赏

阅读相关文章:


双管齐下预防WordPress垃圾评论》上有9个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注