kn007的个人博客
♥ You are here: Home > 软件与网络 > php > 自己写了个防机器人评论的,请大家帮忙发现BUG

自己写了个防机器人评论的,请大家帮忙发现BUG

by | 58 Comments

提醒:本文最后更新于 4178 天前,文中所描述的信息可能已发生改变,请仔细核实。

Akismet的防垃圾评论能力确实是,垃圾评论很多,但是总是能从里边发现非垃圾评论,被划分成垃圾评论,几百条垃圾评论,找出这几条,然后批准,比较耗精力。

Qaptcha滑动解锁无论在美观上,实用方面,都很不错,但是过于依赖jquery库,而且需要的库文件还不少。同时加载超过1个(有2个及2个以上),滑动解锁就失效了,无法拖动,谁都不能回复,除了管理员。很难就是去说,你以后用一个新的插件,没带这个库,一带jquery,滑动解锁必定失效。。。十分坑爹。

因为对jquery的不熟悉,还有上面那个原因,实在是不想去动了,所以我放弃了Qaptcha,虽然有点可惜,但是事情追求不了完美,如要追求完美,还有很长的路要走!

所以我自己写了个非常简单的函数,通过判定评论者是否使复选框选中来作为是不是人的判断,来判定。

因为复选框一般人看到了自然会去选中它,不是人嘛。。。自然不知道。。。

希望我不会太片面了。。所以需要时间来证明是否有效。

现在把源码扔上来,请高手们指教下,不胜感激。

现在已经关闭Akismet了。

兼容Ajax comments。


源码如下(添加在主题的functions.php里面,兼容性基本上100%):

function access_submit($comment) {
   if (!is_user_logged_in()) {
          if(isset($_POST['access_submit'])) {
              return($comment);
          } else {
              if (isset($_POST['isajaxtype']) && $_POST['isajaxtype'] > -1) {
                  die("请先同意声明");
              } else {
                  if(function_exists('err')){
                      err("请先同意声明");
                 } else {
                      wp_die("请先同意声明");
                  }
              }
          }
   } else {
       return($comment);
   }
}
add_action('preprocess_comment', 'access_submit');
function add_checkbox() {  
   if (!is_user_logged_in()) {
      $content.= '<input type="checkbox" name="access_submit" id="access_submit" value="access_submit" style="width: 15px;" /><label for="access_submit" style="margin-left:5px;">同意声明并回复楼主  </label>';  
      $content.= '<span style="font-weight:bold;text-shadow:0 1px 0 #ddd;">  声明:</span> 本博采用 <a rel="nofollow" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" title="署名-非商业性使用-相同方式共享">BY-NC-SA</a> 协议进行授权';
      echo $content;
   }
}  
add_action('comment_form', 'add_checkbox');

实际效果图:

QQ截图20120702234859

转载请注明转自:kn007的个人博客的《自己写了个防机器人评论的,请大家帮忙发现BUG

donate
有所帮助?

Comments

58 Comments立即评论
  1. LV1回复

    直接随机验证码...

    1. MOD回复

      @神爱: 那样不是更麻烦。。直接勾下就可以发了。。。

  2. BY-NC-SA 协议 是保护知识产权?

    1. MOD回复

      @老猫Music: 算是吧,我更愿意说是一种非商业共享声明

  3. 呵呵,这个是绝对需要顶的!!!加油哦,到时候就直接用你的代码好了、、哈

    1. MOD回复

      @imruxin: 现在就可以用啦,3包服务,哈哈 :cool: 话说已经连续3天没有垃圾评论 :arrow:

  4. 回复

    这个是所有的主题都可以吗,还是只是针对loper主题的?为什么我把上面的代码复制到functions.php里,会提示我 “if(isset($_POST['access_submit'])) { ”这一行出错?额,我太懂PHP的...

    1. MOD回复

      @晴颺: 可以说适用任何主题,我自己试过10几款都可以。。。你最好给你完整代码,不保证是否被你修改后是否可用,另外,你的主题是否有其他限制。而且错误是错误什么?这句错误,错误的反馈,起码要给到我,我才能判断

    2. 回复

      @kn007: “Parse error: syntax error, unexpected T_IF in /home/kannayan/qy.me/wp-content/themes/Deve-truth/functions/function-user.php on line 12”打开网页显示的就是这个。第12行就是“ if(isset($_POST['access_submit'])) {”这一句。还有就是我用的是Deve主题。

    3. MOD回复

      @晴颺: 呵呵这不能表示是我的问题,请自己百度学习这个错误原因。请检查是否缺失 分号或者大括号。你在function中,不要与其他函数冲突的情况下,放置的位置,也不要放到另外一个函数里面。如果你不介意,能否将你的function.php发给我看看。 kn007@126.com

    4. MOD回复

      @晴颺: 表示你不是放在function.php,而是在function-user.php内,不明白你这样的做法,虽然function.php内有include,但是优先级等不一样。还有就是function-user.php你是否加了其他东西。php的自检有时是很无语,看似这里错了,其实是另外一个地方有问题

    5. 回复

      @kn007: 已经发邮件给你了...

    6. MOD回复

      @晴颺: 已回复邮件,谢谢

    7. MOD回复

      @晴颺: 你的php版本,另外我重新发了个邮件给你

    8. MOD回复

      @晴颺: 有机会就帮我宣传哈~

    9. 回复

      @kn007: 嗯,好的~ :grin:

  5. 回复

    loper 不是带的有个滑动解锁么。

    1. MOD回复

      @H4ckchen: 跟插件冲突较多,不利于手机用户,所以去除。可以关注我之前的帖子

  6. 回复

    用起来很方便,学习了。Akismet也给关了

    1. MOD回复

      @八宝粥: 谢谢

    2. 回复

      @kn007: 效果挺好,没有出现垃圾评论

    3. MOD回复

      @八宝粥: 呵呵,正常是不会再有垃圾评论的了

  7. 回复

    最近被垃圾评论弄得头大,各种代码均无效果

    1. MOD回复

      @chonghua: 用了这个也无效么。。这个很多人已经在用了。我自己做了AI判断,所以没有勾选框,不过已经不在公开了。

  8. 回复

    支持博主 删除了滑动解锁代码 那删除目录中的qaptcha文件夹和相应的文件 具体可以删除哪里可以告知下吗 谢谢

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif