WordPress 注册、登录页面添加数学题验证码

WordPress 后台登录页面添加数学题验证码

 //后台登陆数学验证码部分
function mx_add_login_fields() {
  //获取两个随机数, 范围0~9
  $num1=rand(0,9);
  $num2=rand(0,9);
  //最终网页中的具体内容
      echo "<p><label for='math' class='small'>验证码</label><br /> <input type='text' name='sum' placeholder='$num1 + $num2 = ?' class='input' value='' size='25' tabindex='4'>"
  ."<input type='hidden' name='num1' value='$num1'>"
  ."<input type='hidden' name='num2' value='$num2'></p>";
}
add_action('login_form','mx_add_login_fields');
function mx_login_val() {
  $sum=$_POST['sum'];//用户提交的计算结果
  switch($sum){
    //得到正确的计算结果则直接跳出
    case $_POST['num1']+$_POST['num2']:break;
    //未填写结果时的错误讯息
    case null:wp_die('错误: 请输入验证码.');break;
    //计算错误时的错误讯息
    default:wp_die('错误: 验证码错误,请重试.');
  }
}
add_action('login_form_login','mx_login_val');

wordpress给注册页面添加数学题验证码

// WordPress 注册页面添加了数学验证码功能部分
function add_registration_fields() {
    // 获取两个随机数, 范围0~9
    $num1 = rand(0, 9);
    $num2 = rand(0, 9);
    // 最终网页中的具体内容
    echo "<p><label for='math' class='small'>验证码</label><br />";
    echo "<input type='text' name='sum' placeholder='$num1 + $num2 =?' class='input' value='' size='25' tabindex='4'>";
    echo "<input type='hidden' name='num1' value='$num1'>";
    echo "<input type='hidden' name='num2' value='$num2'></p>";
}
add_action('register_form', 'add_registration_fields');

function validate_registration($errors, $sanitized_user_login, $user_email) {
    $sum = isset($_POST['sum']) ? $_POST['sum'] : ''; // 用户提交的计算结果,确保处理未设置的情况
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];

    if (empty($sum)) {
        $errors->add('empty_captcha', '错误: 请输入验证码。');
    } elseif ((int)$sum !== $num1 + $num2) {
        $errors->add('incorrect_captcha', '错误: 验证码错误,请重试。');
    }

    return $errors;
}
add_action('registration_errors', 'validate_registration', 10, 3);