wordpress评论添加数学验证码

文章目录

如今wordpress中垃圾评论越来越多了,当然wordpress中的akismet工作的也很不错,但是它偶尔会出现误判。给博客加一个简单的数学验证码不失为一个好办法,唯一值得考虑的就是可能会影响用户的体验,所以本文针对这个情况通过记录cookie值,判断是否为老用户,从而实现博客评论只需填写一次验证码,这样就能大大提高用户体验。接下来介绍一下。

添加数学验证码

将以下代码添加到functions.php中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//评论数学验证码
function spam_protection_math(){
//获取两个随机数, 范围0~9
$num1=rand(0,9);
$num2=rand(0,9);
//最终网页中的具体内容
echo "<p class='comment-form-author'><input type='text' name='sum' class='math_textfield' value='' size='25' tabindex='4'> $num1 + $num2 = ?"
."<input type='hidden' name='num1' value='$num1'>"
."<input type='hidden' name='num2' value='$num2'>"
."<label for='math' class='small'> 验证码</label></p>";
 
}
function spam_protection_pre($commentdata){
$sum=$_POST['sum'];//用户提交的计算结果
switch($sum){
//得到正确的计算结果则直接跳出
case $_POST['num1']+$_POST['num2']:break;
//未填写结果时的错误讯息
case null:wp_die('错误: 请输入验证码.');break;
//计算错误时的错误讯息
default:wp_die('错误: 验证码错误,请重试.');
}
return $commentdata;
}
if($comment_data['comment_type']==''){
add_filter('preprocess_comment','spam_protection_pre');
}
// 增加: 錯誤提示功能

1
spam_protection_math()

插入到你的评论框模板的合适位置,在网址信息下方,评论框上方。如下图所示:
sxyzm

判断是否评论过

先根据浏览器的Cookie来判断是不是已经评论过的,如果是已经发表评论的,则显示欢迎XX回来的字样,不需要再填写验证码。并且用户可以自由编辑自己的个人信息,php代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php if(isset($_COOKIE['comment_author_email_'.COOKIEHASH]) && isset($_COOKIE['comment_author_'.COOKIEHASH]))  : ?>
<?php $comment_author=$_COOKIE['comment_author_'.COOKIEHASH];  ?>
<div id="span-list">
<div id="commentwelcome">
<?php printf(__(' <span>%1s, 欢迎回来!</span>'), $comment_author); ?>
</div>
<div id="welcome">
<div id="welcome1">
<?php printf(__('<span>不是 %s ?</span> '), $comment_author); ?>
</div>
</div>
<div id="author_info">
//你的个人信息框代码,即姓名,邮箱,网址框,不需要加入数学验证码
</div>
</div>
<?php endif; ?>

为了方便编辑个人信息,本文采用了jquery控制个人信息框的出现和隐藏,首先要做的是给个人信息框也就是姓名,邮箱,网址加上以下div标签,这里不需要加入数学验证码,因为该用户已评论过:

1
<div id="author_info"></div>

jquery代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 评论欢迎语
/*https://www.tennfy.com*/
	 //开始
if($('input#author[value]').length>0){ //判断用户框是否有值
$("#author_info").css('display','none'); //将id为author_info的对象的display属性设为none,即隐藏
var change='<span id="show_author_info" style="cursor: pointer; color:#2970A6;display:block;">编辑信息 &raquo;</span>'; //定义change,style是定义CSS样式,让他有超链接的效果,color要根据你自己的来改,当然你也可以在CSS中定义#show_author_info来实现,这样是为了不用再去修改style.css而已!
var close='<span id="hide_author_info" style="cursor: pointer;color: #2970A6;">关闭 &raquo;</span>'; //定义close
$('#welcome').append(change); //在ID为welcome的对象里添加刚刚定义的change
$('#welcome').append(close); // 添加close
$('#hide_author_info').css('display','none'); //隐藏close
$('#show_author_info').click(function() { //鼠标点击change时发生的事件
$('#author_info').slideDown('slow'); //用户输入框向下滑出
$('#commentwelcome').css('display','none');//隐藏欢迎语
$('#welcome1').css('display','none');//隐藏欢迎语
$('#show_author_info').css('display','none'); //隐藏change
$('#hide_author_info').css('display','inline'); //显示close
$('#hide_author_info').click(function() { // 鼠标点击close时发生的事件
$('#author_info').slideUp('slow'); //用户输入框向上滑
$('#commentwelcome').css('display','inline');//显示欢迎语
$('#welcome1').css('display','inline');//显示欢迎语
$('#hide_author_info').css('display','none'); //隐藏close
$('#show_author_info').css('display','inline'); })})}

这里值得注意的是写代码的时候分为3个控制逻辑:1、判断用户是否为管理员2、判断用户是否以前评论过3、判断用户是否为新用户。以上代码为第二个控制逻辑。大概的思路为:

1
2
3
4
5
6
7
if 1
//出现欢迎管理员回来代码
elseif 2
//出现上文代码
else 
//出现个人评论框以及数学验证码代码 
end

小结

css样式需要根据主题的特点来写,通过记录cookie可以提高用户的体验,是一个比较好的办法。效果可以参见我的博客下方评论。

本文出自 TENNFY博客,转载时请注明出处及相应链接。

本文永久链接: https://www.tennfy.com/967.html

下一篇文章:

上一篇文章:

21人参与了讨论

  1. 免费部落 说:

    做得有些复制了,其实浏览器就可以记住这些!

  2. 免费部落 说:

    也对,看来我的也得改一下了!

  3. 逗婦乳 说:

    我博客的垃圾評論都是直接post提交的

  4. xilouqingzhu 说:

    有判断cookie 的话,验证码的确稍微人性了一点点

  5. 那时年少 说:

    已发表评论用户不需要输入验证码,这个比较人性化

  6. eliteYang 说:

    拿走了,感谢分享

  7. Skyfrit 说:

    我应该会放在我的主题里,请问这个是你自己写的? :?:

  8. ew 说:

    純情碎就是為了測試

  9. OurELife 说:

    我这段时间的垃圾评论明显是一个人留的,按你这个是不是他一开始手动输入一下,以后就可以随便发了!

  10. BanYuner 说:

    使用了wp_die之后 如果没有填写验证码点击提交 整个页面就会变形了

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

2 + 2 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部