给WordPress的评论添加算术验证

WordPress中,我希望可以不填写名称和邮件地址也可以发表评论,但是这样垃圾评论就会变多,所以就要考虑再加一个验证的东西,比如图形验证、算术验证之类,相对来说使用算术验证,比较方便同时效果也不错。

网上的方法也很多,有使用插件比如Math Comment Spam Protection(详细的中文介绍);有修改wordpress根目录下内核文件wp-comments-post.ph和主题文件comments.php的方法,这个方法如果更新WordPress程序后就失效了;还有修改主题的functions.php和comments.php文件的方法。这里介绍修改主题的functions.php和comments.php文件的方法,这个方法不用修改WordPress的内核文件,以后升级WP程序的时候不用再次改代码,比较方便些。

第一步:自定义一个算术验证函数。将以下函数代码添加到主题的functions.php文件中:

//自定义算术验证函数
function spam_protection_math(){
  //获取两个随机数, 范围0~9
  $num1=rand(0,9);
  $num2=rand(0,9);
  //最终网页中的具体内容
  echo"<div class='row'>"
    ."<input type='text' name='sum' class='math_textfield' value='' tabindex='1'> $num1 + $num2 = ? "
    ."<input type='hidden' name='num1' value='$num1'>"
    ."<input type='hidden' name='num2' value='$num2'>"
	."<label for='math' > (为防spam,提交评论之前必须做一道非常简单的算术题) </label>"
    ."</div>";

}
function spam_protection_pre($commentdata){
  $sum=$_POST['sum'];//用户提交的计算结果
  switch($sum){
    //得到正确的计算结果则直接跳出
    case $_POST['num1']+$_POST['num2']:break;
    //未填写结果时的错误讯息
    case null:err('Error: 请输入算术题的计算结果.');break;
    //计算错误时的错误讯息
    default:err('Error: 你输入的计算结果错啦,请重新输入.');
  }
  return $commentdata;
}
if(!is_user_logged_in() && $comment_data['comment_type']==''){
  add_filter('preprocess_comment','spam_protection_pre');
}

第二步:将自定义函数插入需要显示的位置。将以下代码添加到主题的comments.php文件中,可插入至需要显示算术验证框的位置,但需加在递交评论之前:

<?php if(!is_user_logged_in())spam_protection_math();?>

第三步:css文件中指定算术验证框的属性,使之与当前主题搭配。根据实际的主题修改即可,我的主题使用如下属性:

input.math_textfield{font-size:100%; font-family:Verdana,Arial,Helvetica,Sans-serif; padding:0 0.1em;}
#respond{font-size:90%; padding:0 0.1em;}
#respond .row{margin:-1em 0 0 0;}
#respond .math_textfield{width:80px;}

以上内容主要参考为WordPress评论添加简单算术验证码,需要更详细的说明的也请看这篇文章。

参考链接:

  1. 为WordPress评论添加简单算术验证码
  2. 留言算术验证码插件Math Comment Spam Protection

分类:Wordpress

标签:, ,

已有 3 人 对 ”给WordPress的评论添加算术验证” 进行了评论

  1. 忘想说道:

    我有点疑问,想问一下,他的出错函数err(‘Error: 你输入的计算结果错啦,请重新输入.’);能不能也提供?

    [Reply]

    小喜 Reply:

    没有这个函数吧,具体我也不太懂,你看看代码

    [Reply]

    忘想 Reply:

    后来我没有找到,后来只好找了一个WP的wp_die必备函数

    [Reply]

对本文发表评论





3 + 5 = ?

注意:
1、请勿单纯发表顶啊、打酱油之类无任何意义的评论,否则将被视为spam!谢谢合作!
2、但欢迎你留下对本文的看法或技术上的任何疑问,我会及时回复你。