不知为何,博客的垃圾评论越来越多,从之前的二三十条到后来的一百多,实在很烦人!开启评论审核功能后确实起到了一定的效果,但由于评论太多,管理上确实太麻烦。后来研究了下代码,添加了一键删除所有待审核评论,Typecho 代码实现一键删除待审核评论 - Eonegh's Blog,但是这样可能会删除掉有用的评论。因此为博客添加了评论算术验证。目前看来效果已经达到,这里贴出相关代码。

一、操作环境

  1. 博客程序:Typecho V1.1 (17.10.30)
  2. 适用于主题:Handsome
  3. 编辑工具:EmEdit
  4. 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); 如下图:
Typecho 代码实现评论算术验证

3、主题目录—>component目录下comments.php文件,搜索关键字“提交按钮”添加代码:
<?php spam_protection_math();?> 如下图:
Typecho 代码实现评论算术验证

4、CSS样式。根据需要自行修改。

三、效果截图

Typecho 代码实现评论算术验证

四、存在问题

由于本站使用了CDN加速,评论提交后可能不会立即显示出来。刷新页面后可能需要等半个小时吧。


本文标签:typecho代码PHP建站