不知为何,博客的垃圾评论越来越多,从之前的二三十条到后来的一百多,实在很烦人!开启评论审核功能后确实起到了一定的效果,但由于评论太多,管理上确实太麻烦。后来研究了下代码,添加了一键删除所有待审核评论,Typecho 代码实现一键删除待审核评论 - Eonegh's Blog,但是这样可能会删除掉有用的评论。因此为博客添加了评论算术验证。目前看来效果已经达到,这里贴出相关代码。
一、操作环境
- 博客程序:Typecho V1.1 (17.10.30)
- 适用于主题:Handsome
- 编辑工具:EmEdit
- SFTP工具:WinSCP
二、代码修改
1、主题目录下functions.php
文件,最底处添加代码:
function spam_protection_math(){
$num1=rand(1,49);
$num2=rand(1,49);
echo "<label style=\"line-height:30px;\" for=\"math\"><code>$num1</code>+<code>$num2</code> = </label>\n";
echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\" style=\"width: 73px;background-color: #00FF00;\" placeholder=\"回车提交\">\n";
echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n";
echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
}
function spam_protection_pre($comment, $post, $result){
$sum=$_POST['sum'];
switch($sum){
case $_POST['num1']+$_POST['num2']:
break;
case null:
throw new Typecho_Widget_Exception(_t('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败'));
break;
default:
throw new Typecho_Widget_Exception(_t('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败'));
}
return $comment;
}
2、主题目录下functions.php
文件,搜索函数themeInit($archive)
,在末尾处添加代码:$comments = spam_protection_pre($comments);
如下图:
3、主题目录—>component目录下comments.php
文件,搜索关键字“提交按钮”添加代码:<?php spam_protection_math();?>
如下图:
4、CSS样式。根据需要自行修改。
三、效果截图
四、存在问题
由于本站使用了CDN加速,评论提交后可能不会立即显示出来。刷新页面后可能需要等半个小时吧。
Too few arguments to function spam_protection_pre(), 1 passed in C:wamp64wwwtypechousrthemesdefaultfunctions.php on line 110 and exactly 3 expected
不能用了