小米笔记 - 坏记性不如烂笔头

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」版。查看和发表评论请点击:完整版 »