WordPress 主题制作技巧之二 [ 主动添加反垃圾留言代码 ]

跟许多园友一样,我的基于wordpress的独立博客建立之初也饱受垃圾留言的困扰,后来也用过包括Akismet和some chinese please在内的几个反垃圾留言插件,但是我本人最不愿看到后台中插件一大堆的情况,无论对博客加载速度还是对版本更新的稳定性都不好,后来在网上寻觅不使用插件的方法,经过综合与修改,我在网站中内置了一个简单实用的留言验证功能,一直沿用至今。不喜欢用插件的童鞋们可以看看。

本方法是利用rand()函数生成两个一位的自然数,评论者输入二者之和后,网页利用js代码和php代码进行输入结果验证,原理简单地像没有一样,但是稳定实用,用户体验很流畅,屏蔽垃圾留言的效果也很好。

首先在模板文件中打开 comments.php ,在评论提交表单中你认为合适的地方插入一项验证条目(我把它插到了提交按钮的上方),代码如下:

<?php if (!$user_ID) : ?> 
    <?php $lt_sub_a=rand(0,5); $lt_sub_b=rand(3,9); ?> 
    <p>
    <input type="text" size="17" name="lt_sub_ab" id="lt_sub_ab" tabindex="4" /> = <?php echo $lt_sub_a; ?> + <?php echo $lt_sub_b; ?>
    <label for="check"> &nbsp;&nbsp;&nbsp;&nbsp;请完成等式 *</label>
    <input name="lt_sub_a" id="lt_sub_a" value="<?php echo $lt_sub_a; ?>" type="hidden" />
    <input name="lt_sub_b" id="lt_sub_b" value="<?php echo $lt_sub_b; ?>" type="hidden" /
    ></p> 
<?php endif; ?>

下图是我博客上的留言表单

然后就是对留言者在表单中输入的验证码进行验证。为了使验证过程在当前页面完成从而达到快速直接的效果,需要在 comments.php 进行js验证,代码如下(这里我只贴出了与验证码有关的代码):

function trim(str){ //删除左右两端的空格   
    return str.replace(/(^\s*)|(\s*$)/g, "");   
} 

function validate_form(thisform)
{
with (thisform)
  {
    if (validate_checknum(lt_sub_ab,"请正确输入两个数字之和...")==false)
      {email.focus();return false}
  }
}

这里提醒一下,别忘了在form表单的onsubmit属性上添加上验证函数(这里是 onsubmit="return validate_form(this);" )。

按说这样就可以使用了,可我还是不放心,当前的网络环境下,有些浏览器会对js的执行实施一些限制。出于验证过程的稳定性以及用户体验的考虑,我在wordpress和程序中又加了一层验证,这个验证只有在js验证被限制时才会出现。

打开wordpress程序根目录下的评论提交页面 /wp-comments-post.php ,找到

if ( '' == $comment_content )
    wp_die( __('Error: please type a comment.') );

在这句代码的前面插入下面的代码(当然,为了避免改动程序,这段代码的插入也可以利用勾子来实现,简单起见,本文不再阐述)。

if ( !$user->ID ) 
{
    $lt_sub_a = trim($_POST[lt_sub_a]);
    $lt_sub_b = trim($_POST[lt_sub_b]);
    $lt_sub_ab = trim($_POST[lt_sub_ab]);
    if((($lt_sub_a+$lt_sub_b)!=$lt_sub_ab)|| empty($lt_sub_ab))
        {wp_die( __('错误: 请正确输入两个数字之和...') );}
}

OK,全部完成。

posted @ 2012-05-18 07:24  刘笨笨  阅读(1430)  评论(1编辑  收藏  举报