首页 > Linux > WordPress添加算术验证码和屏蔽非中文评论(非插件法)

WordPress添加算术验证码和屏蔽非中文评论(非插件法)

2014年9月6日 LTNS     访问次数 116 发表评论 阅读评论

一直在用 Akismet 这款 WordPress防垃圾评论插件,虽然方便易用、拦截效率高,但也有一定的误判率,所以不得不时常登录博客进行人肉复查。

由于垃圾评论越来越多,不胜其扰,于是转而寻求效率更高的方式,另外还由于vps空间和内存有限,所以尽量采用非插件的方法。

经过网上搜索,决定对评论进行算术验证,另外,由于本博客都是中文内容,所以还要增加屏蔽非中文评论的功能。由于本博客用的是 inove主题,所以下面的操作均以该主题为例。

网上有篇 教程 介绍了一个对评论添加四则运算(加减乘除)验证码的方法,试用了一下感觉比常见的二则运算(仅加减)拦截效率更高。不过有个小bug,即,乘法运算如有零参与的话结果却不为零导致无法通过验证,于是在 inove主题 文件夹下面的 comments.php文件里添加代码,并简单修改了一下以避免零参与乘法运算。

			<div class="submitbutton">
#在该行插入下面的12行代码
<?php
    $b = rand(1,9);
    $c = rand(1,4);
    if($c==1){$a = rand(0,40); $s = '+';}
    elseif($c==2){$a = rand(0,30)+$b; $s = '-';}
    elseif($c==3){$a = rand(1,5); $s = '*';}
    else {$a = $b*$c; $s = '/';}
    echo _e("$a $s $b =", 'inove'); ?>
    <input type="text" name="cal" id="cal" class="textfield" value="" size="4" tabindex="5" style="width:20px" /><?php if ($req) _e('(required)', 'inove'); ?>
    <input name="a" type="hidden" value="<?php echo $a;?>" />
    <input name="b" type="hidden" value="<?php echo $b;?>" />
    <input name="c" type="hidden" value="<?php echo $c;?>" />

然后在 WordPress根目录下的 wp-comments-post.php 文件中添加如下代码即可。

if ( !$user->ID ) {
    $a = trim($_POST['a']);
    $b = trim($_POST['b']);
    $c = trim($_POST['c']);
    $sub = trim($_POST['cal']);
    if($c==1) $res = (bool)($sub == $a + $b);
    elseif($c==2) $res = (bool)($sub == $a - $b);
    elseif($c==3) $res = (bool)($sub == $a * $b);
    elseif($c==4) $res = (bool)($sub == $a / $b);
    else $res = false; 
    if(!$res || empty($sub)){
        wp_die( __('Error: please enter the right calculating result.') );
    }
}
#在该行插入上面的14行代码
if ( '' == $comment_content )

 
接下来参考 这篇教程,在 inove主题 文件夹下的 functions.php文件开头处添加代码

<?php
// check no-chinese-word comment
function custom_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "您的评论中必须包含汉字!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'custom_comment_post');
// check end

/** inove options */

注:
1. 须把 functions.php文件下载到电脑上,用类似 UE32的软件编辑并保存为 UTF-8格式,再回传到 VPS。

2. 函数名 custom_comment_post可自定义。

 
经过二个多月的实际使用效果很满意,只有个别的垃圾评论漏网或误判,基本上没怎么让 Akismet参与。

最后,每次升级 wordpress或主题时,相应的文件都要重新修改一下。

 
 

参考文章
http://a18zhizao.com/y2009/1152_wordpress-anti-spam-method-of-non-plug-in.html
http://www.ecdoer.com/post/wordpress-spam.html
 

分类: Linux 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
12 / 3 = (必填)