转载:如何给WordPress登录和注册页面添加验证码等自定义表单项

1,084次阅读
没有评论

在做WordPress主题开发的过程中,有的时候我们需要给WordPress默认的登录表单添加一些自定义的表单项,比如验证码、手机号等,这个实现起来其实也是很简单的,主要用到WordPress自带的login_form和login_form_login两个钩子,login_form钩子可以帮助我们创建新的自定义表单项加入到默认的登录表单中,login_form_login钩子帮我们完成自定义表单项在提交登录后的验证工作,下面我们就以为WordPress登录表单添加一个验证码为例,

您只需要将下面的代码放到您的wp-content/themes/在用的主题/functions.php文件中即可。

// 后台登陆数学验证码
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() {
// 仅在表单提交(POST请求)时执行验证,避免页面加载时触发警告
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

// 使用空合并运算符安全获取数据
$sum = $_POST['sum'] ?? '';
$num1 = $_POST['num1'] ?? 0;
$num2 = $_POST['num2'] ?? 0;
// 校验是否为空
if ($sum === '') {
wp_die('错误: 请输入验证码.');
}
// 计算并校验结果 (强制转换为 int 类型以确保逻辑正确)
if ((int)$sum !== ((int)$num1 + (int)$num2)) {
wp_die('错误: 验证码错误,请重试.');
}
}
}
add_action('login_form_login', 'mx_login_val');
// 后台登陆数学验证码代码结束

 

实际效果

转载:如何给WordPress登录和注册页面添加验证码等自定义表单项

 

以下是给注册页面增加一段验证

//后台注册验证开始//
add_action( 'register_form', 'add_security_question' );
function add_security_question() { ?>
    <p>
    <label><?php _e('请输入本站域名:www.wp-diary.com') ?><br />
        <input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" /></label>
    </p>
<?php }
     
add_action( 'register_post', 'add_security_question_validate', 10, 3 );
function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {
    // 如果没有回答
    if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
        return $errors->add( 'proofempty', '<strong>错误</strong>: 您还没有回答问题。'  );
    // 如果答案不正确
    } elseif ( strtolower( $_POST[ 'user_proof' ] ) != 'www.wp-diary.com' ) {
        return $errors->add( 'prooffail', '<strong>错误</strong>: 您的回答不正确。'  );
    }
}
//后台注册验证结束//

效果如下:

转载:如何给WordPress登录和注册页面添加验证码等自定义表单项

 

转载自:WordPress日记

正文完
 0
评论(没有评论)