Categories: WP/WP Plugins | Tags: | Views: 3,726

这个方法来自网上, 已经被转载多次了, 很多地方叫 "WordPress 代码添加算术验证码防止垃圾评论", 我已经无法找到原始出处. 我只是对它进行了一点小小的改进, 把它变成了 +-/* 四则运算. 方法也不是很复杂, 加入一个运算法则的变量就行了. 效果见下面的评论.

在主题文件夹里找到comments.php文件,在你想要显示输入框的地方加入代码:

     <div class="row">
    <input type="text" name="cal" id="cal" class="textfield" value="" size="24" tabindex="4" />
    <label for="cal" class="small"><?php
        $b = rand(1,9);
        $c = rand(1,4);
        if($c==1){$a = rand(0,40); $s = '+';}
        elseif($c==2){$a = rand(0,30)+$b; $s = '-';}
        elseif($c==3){$a = rand(0,5); $s = '*';}
        else {$a = $b*$c; $s = '/';}
        echo _e("$a $s $b = ?", 'elegantbox'); ?> <?php if ($req) _e('(required)', 'elegantbox'); ?>
    </label>
    <input name="a" type="hidden" value="<?php echo $a;?>" />
        <input name="b" type="hidden" value="<?php echo $b;?>" />
    <input name="c" type="hidden" value="<?php echo $c;?>" />
      </div>

 

在文件wp-comments-post.php中加入如下代码进行验证:

if ( !$user->ID ) {
    $a = trim($_POST['a']);
    $b = trim($_POST['b']);
    $c = trim($_POST['c']);
    $sub = trim($_POST['cal']);
    if($c==1) $res = (bool)($sub == $a + $b);
    elseif($c==2) $res = (bool)($sub == $a - $b);
    elseif($c==3) $res = (bool)($sub == $a * $b); 
    elseif($c==4) $res = (bool)($sub == $a / $b);
    else $res = false;
 
    if(!$res || empty($sub)){
        wp_die( __('Error: please enter the right calculating result.') );
    }
}

 

另外,顺便记录一下这次wordpress升级改动的地方

1. 文章存档和链接的分栏显示 修改参考:wp侧栏内容分列显示技巧

2. 修改wp-codebox, (如果wp-codebox更新了的话) 修改参考:告别wordpress贴代码的烦恼

3. 修改评论验证, 即本文所述的内容

 

RELATED POSTS:

  1. WP插件 Post with feelings 1.0
  2. 谁动了你的代码?–FCKEditor插件code开发小记
  3. Dean’s FCKEditor With pwwang’s code plugin For WordPress
  4. WP-plugin:Verification Code for Comments(评论验证码)
  5. 教你发布wordpress插件
  6. WP-Plugin: Verification Code for Comments 2.1.0
  1. October 19th, 2009 at 12:58
    Reply | Quote | #1

    不错,不过还是喜欢简洁点 但又不让访客太过于麻烦,有些人天生不喜欢验证码

    • October 19th, 2009 at 13:31
      Quote | #2

      @沉思小屋:但是确实有很多垃圾评论很烦人

    • October 23rd, 2011 at 12:11
      Quote | #3

      这个还是不会弄啊~这几天Akismet使用不了~来了一推垃圾英文评论~烦啊 :(

  2. October 17th, 2010 at 20:57
    Reply | Quote | #4

    我加了个留言验证码,怎么还有垃圾留言呢?

;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

你可以使用@somebody:开头, 来邮件通知somebody你回复了他的留言(用户名区分大小写).