WordPress无插件实现防止垃圾评论算术验证码

发表评论 阅读评论

Blog防止垃圾评论一直是个头痛的问题,以前我用Bo-Blog的时候整天N多垃圾评论,带N多连接,后来把评论需要审核后显示,但这样不能解决根本问题,每天后台删除垃圾评论就要花费不少时间,近日Blog重开换成WordPress后也要考虑这个问题WordPress有自带一个 Akismet插件,能过滤部份垃圾评论但效果不理想,然后试了好几个插件都也不太理想,在Google搜索了老半天,后面听说用算术验证方式来做为验证码效果很不错,并介绍了款插件:Math Comment Spam Protection,试用了效果还可以,但后面又搜索到老二的博客上有更简单的方法可以实现这个功能(本人不喜欢装太多插件,理论上插件装太多会影响速度,还有可能造成一些不兼容的问题)。于是把 Math Comment Spam Protection 插件删除后按老二的博客所提到的方法进行了改造,并做了稍稍修改,使其能通过W3C验证。

方法如下:

修改 wp-comments-post.php
找到下面这行代码:

if ( '' == $comment_content )

在这行上面添加:

//Fufu_checkcode
if ( !$user->ID ) {
    $aaa = trim($_POST[aaa]);
    $bbb = trim($_POST[bbb]);
    $subab = trim($_POST[subab]);
    if((($aaa+$bbb)!=$subab)|| empty($subab)){
        wp_die( __('Error: Please enter the correct results of the math problems.') );
    }
}
//Fufu_end

然后修改当前主题目录下的 comments.php (我用的 iNove) ,在适当的位置添加代码,我是在提交按钮之前添加的,即查找:

<input name="submit" type="submit" id="submit" class="button" tabindex="5" value="<?php _e('Submit Comment', 'inove'); ?>" />

在其前面添加代码:

<?php $aaa=rand(0,5); $bbb=rand(3,9); echo $aaa; ?>+<?php echo $bbb; ?>=
<input type="text" name="subab" id="subab" class="textfield" 
    size="2" tabindex="5" style="width:20px" />
<?php if ($req) _e('(required)', 'inove'); ?>
<input name="aaa" value="<?php echo $aaa; ?>" type="hidden" />
<input name="bbb" value="<?php echo $bbb; ?>" type="hidden" />

如果你的主题不是 iNove 的话,下面这段代码要做相应的修改,把inove改成相应的主题名就ok了,这段代码的意思是显示“(必填)”两字,需要对应的语言。

<?php if ($req) _e('(required)', 'inove'); ?>
标签: ,

  1. | |

    test :grin:

  2. |

    :twisted: :twisted: 我用akismet

  3. |

    学习了,留着备用,呵呵。

  4. |

    ...............

  5. | |

    好像没看见算术验证码

  6. | |

    @测试评论
    把验证码给去掉了。

  7. |

    加了代码,也可以显示,但验证总是提示错误!

  8. | |

    @天空
    你网站地址是什么,我看看是哪里写错了。

  9. | |

    我悄悄的,正如我悄悄的离开!神经大爆炸 带走任何有用的资源,不忘留下痕迹!现在是北京时间:22:59:09

  10. | |

    我来试试!

  11. | |

    为什么不起作用,不填验证也能提交?

  12. | |

    @web前端开发
    现在我把验证码去掉了

回到顶部