📒为wordpress评论添加验证码

经常会有大量垃圾评论,删了又有了,关了评论功能又不合适。于是就想给评论加个验证码的功能,经过一番查找,找到了这段算数验证码的代码。我当前WordPress 5.8.2版本的,实现效果在评论时候可以看到,其他版本请自行尝试,代码仅供参考。

进行网站后台,先检查评论 (comments.php)代码是否采用了wordpress的默认评论表单函数comment_form(),如果是的话继续选择外观-主题编辑器,将下面代码复制到模板函数functions.php最下方,然后更新文件。

//为评论添加算数验证码
function my_fields($fields) {
    $num1=rand(0,50);
    $num2=rand(0,50);
    $base64Num1 = base64_encode($num1);
    $base64Num2 = base64_encode($num2);
    $myfuelds['sum'] = '<p class="comment-form-url"><label for="sum">验证码<span class="required"> *</span></label><input id="sum" name="sum" type="text" value="" size="30" maxlength="100" required="required" placeholder="' . $num1 . ' + ' . $num2 . ' = ?" /><input type="hidden" name="num1" value="' . $base64Num1 . '"><input type="hidden" name="num2" value="' . $base64Num2 . '"></p>';
     
    array_splice($fields,3,0,$myfuelds);
    return $fields;
}
add_filter('comment_form_default_fields','my_fields');
 
function spam_protection_pre($commentdata){
    $sum=$_POST['sum'];
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $base64Num1 = base64_decode($num1);
    $base64Num2 = base64_decode($num2);
    switch($sum){
        case $base64Num1+$base64Num2:
            break;
        case null:
            wp_die('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败');
            break;
        default:
            wp_die('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败');
    }
    return $commentdata;
}
add_filter('preprocess_comment','spam_protection_pre');

//移除站点输入框
add_filter('comment_form_default_fields', 'mytheme_remove_url');
function mytheme_remove_url($arg) {
    $arg['url'] = '';
    return $arg;
}

代码知识点如下:

红色*号可通过该样式实现:

<span class="required"> *</span>

输入框占位符实现:

placeholder="' . $num1 . ' + ' . $num2 . ' = ?"

base64编码和解码:

base64_encode($num1);
base64_decode($num1);

代码加上了查看效果,再根据自己的主题再适当调整一些样式即可。


📢原创文章📢
未经授权不得转载或转载请注明出处
本文地址: https://www.zhaoxiangguang.cn/note/wordpress/358.html

为您推荐

发表回复

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