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 评论添加简单算术验证码,需要更详细的说明的也请看这篇文章。
参考链接:
我有点疑问, 想问一下, 他的出错函数 err('Error: 你输入的计算结果错啦,请重新输入.'); 能不能也提供?
没有这个函数吧,具体我也不太懂,你看看代码
后来我没有找到, 后来只好找了一个 WP 的 wp_die 必备函数