Typecho非插件实现评论算术验证码
刚刚有朋友给我反应说博客评论不上,原因是我开了垃圾评论过滤插件,但是后台太多垃圾评论了,偶尔还是会误阻拦,导致评论不了。
其实Typecho的垃圾评论一直都困扰着我,考虑过第三方评论,国内的不喜欢,国外的又需要翻墙,可能对有些朋友不太友好,所以暂时也不打算使用第三方评论。
网站的垃圾评论应该是用软件刷的,我也经常会在其它博客看到类似垃圾评论(纯英文,带链接),具体我也不知道是谁搞的,希望加上这个验证码能阻止这种垃圾评论,现在博客开启了评论算术验证码及垃圾评论过滤插件(已不会阻止评论,某些评论可能仍然需要审核)
其实说到垃圾评论,我今天清理评论时,发现了很多类似垃圾评论的伪垃圾评论,指的是:毫无意义的评论,例如:很好、学习了。我很纠结该不该删除,随后一想评论本来就少,还是不删吧哈哈。 :mrgreen: 不过还是希望能看到这篇文章的朋友,不要评论与文章无关的评论,做一个干净的博客,也是我一直的期望。
来吧,试试评论再看内容。 :oops:
[hide]
functions.php
在functions.php中放入如下代码,很简单。
/**
* 数学算术评论验证码
*/
function themeInit($comment){
if ($comment->is('single')) {
$comment = spam_protection_pre($comment);
}
}
function spam_protection_math(){
$num1=rand(0,9);
$num2=rand(0,9);
echo "<label for=\"math\">请输入 <i>$num1 + $num2 = ?</i> 的计算结果:</label>\n";
echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\">\n";
echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n";
echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
}
function spam_protection_pre($commentdata){
$user = Typecho_Widget::widget('Widget_User');
if (isset($_REQUEST['text']) && $_REQUEST['text'] != null && !$user->hasLogin()) {
if($_POST['num1'] == null || $_POST['num2'] == null) {
throw new Typecho_Widget_Exception(_t('请输入验证码'));
}
$sum=$_POST['sum'];
switch($sum){
case $_POST['num1']+$_POST['num2']:
break;
case null:
throw new Typecho_Widget_Exception(_t('请输入验证码'));
break;
default:
throw new Typecho_Widget_Exception(_t('验证码错误,请重新输入'));
}
}
return $commentdata;
}
comment.php
在comment.php中恰当的位置添加以下代码。
<?php spam_protection_math();?>
如放在评论提交form中,submit上。
<form method="post" action="<?php $this->commentUrl() ?>" id="comment-form" role="form">
//此处略过表单...
<p><?php spam_protection_math();?></p>
<p><button type="submit" class="submit"><?php _e('评论'); ?></button></p>
</form>
演示图:
[/hide]
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »