You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress注册时按用户角色白名单.edu等特定邮箱域名

实现WordPress自定义注册的角色分配与候选人邮箱验证

Got it, let's walk through how to build this feature for your custom WordPress theme's registration flow. I'll break it down into actionable steps so you can implement it smoothly.


1. 给注册表单添加角色选择控件

首先,找到你自定义主题里的注册模板文件(通常是register.php或类似命名的文件),在表单中加入单选按钮组,让用户选择注册身份:

<p class="form-row">
    <label for="user_role">注册身份:</label>
    <input type="radio" name="user_role" id="role-employer" value="employer" required>
    <label for="role-employer">我要招聘(雇主)</label>
    
    <input type="radio" name="user_role" id="role-candidate" value="candidate" required>
    <label for="role-candidate">我要找工作(大学生候选人)</label>
</p>

2. 提交表单时分配对应角色

接下来,在用户提交注册信息后,根据选择分配对应的角色。如果你的主题沿用WordPress默认注册钩子,把这段代码加到主题的functions.php里:

// 注册完成后分配自定义角色
add_action('user_register', 'assign_custom_registration_role');
function assign_custom_registration_role($user_id) {
    if (!empty($_POST['user_role'])) {
        $selected_role = sanitize_text_field($_POST['user_role']);
        $user = new WP_User($user_id);
        
        // 确保角色存在(步骤3会说明如何创建自定义角色)
        if ($selected_role === 'employer') {
            $user->set_role('employer');
        } elseif ($selected_role === 'candidate') {
            $user->set_role('candidate');
        }
    }
}

如果你的主题是完全自定义的注册逻辑(未使用WP默认注册机制),直接把角色分配代码放到注册处理的PHP块中,在创建用户后执行即可。

3. 创建自定义角色(可选但推荐)

如果你的WordPress还没有employer和candidate角色,添加这段代码到functions.php来创建:

// 初始化自定义用户角色
add_action('init', 'create_custom_user_roles');
function create_custom_user_roles() {
    // 创建雇主角色
    add_role(
        'employer',
        '雇主',
        array(
            'read' => true, // 赋予基础阅读权限
            'edit_posts' => false,
            // 按需添加其他权限,比如发布招聘信息的权限
        )
    );

    // 创建候选人角色
    add_role(
        'candidate',
        '候选人',
        array(
            'read' => true,
            // 按需添加其他权限,比如上传简历的权限
        )
    );
}

添加后刷新一次后台,角色就会生效,之后可以删掉这段代码(角色会保留在数据库中)。

4. 给候选人添加.edu邮箱验证

最后,仅对选择「找工作」的候选人验证邮箱是否为.edu域名。用registration_errors钩子可以在注册时实时验证并返回错误提示:

// 验证候选人的.edu邮箱
add_filter('registration_errors', 'validate_candidate_edu_email', 10, 3);
function validate_candidate_edu_email($errors, $sanitized_login, $user_email) {
    // 只对候选人角色执行验证
    if (!empty($_POST['user_role']) && $_POST['user_role'] === 'candidate') {
        $email_domain = substr(strrchr($user_email, '@'), 1);
        // 验证域名是否为.edu,兼容.edu.cn这类二级域名情况
        $is_edu_domain = preg_match('/\.edu(\.[a-z]{2,})?$/i', $email_domain);
        
        if (!$is_edu_domain) {
            $errors->add('invalid_edu_email', __('抱歉,候选人注册必须使用.edu结尾的校园邮箱。', 'your-theme-text-domain'));
        }
    }
    return $errors;
}

如果是自定义注册处理逻辑,直接把验证逻辑放到创建用户之前:

// 自定义注册流程中的邮箱验证
if ($_POST['user_role'] === 'candidate') {
    $email_domain = substr(strrchr($_POST['user_email'], '@'), 1);
    if (!preg_match('/\.edu(\.[a-z]{2,})?$/i', $email_domain)) {
        // 显示错误提示给用户
        $registration_error = '抱歉,候选人注册必须使用.edu结尾的校园邮箱。';
    } else {
        // 继续执行用户创建流程
    }
}

测试一下整个流程:选择候选人角色时用非.edu邮箱注册,应该会弹出错误提示;用.edu邮箱或选择雇主角色时,注册正常完成并分配对应角色。

内容的提问来源于stack exchange,提问作者NOSDUH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:21:36