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

如何在WordPress中使用user_register钩子添加用户手机号自定义字段

WordPress通过AJAX创建用户并利用user_register钩子添加手机号自定义字段

先修正代码中的函数名不匹配问题

你当前代码里add_action指定的回调函数是register_user,但实际定义的函数名是registrar_cliente,这会导致AJAX调用失效,必须统一函数名,下面示例统一为register_user。

实现方案:两种方式添加手机号自定义字段

方式一:创建用户后直接更新用户元(简单直接)

在AJAX函数中,当wp_insert_user成功创建用户后,直接调用update_user_meta保存手机号到用户自定义字段:

add_action('wp_ajax_nopriv_register', 'register_user');
add_action('wp_ajax_register', 'register_user');
function register_user(){
    // 验证请求合法性(必须加,防止CSRF攻击)
    if(!isset($_POST['dataForPHP']) || !wp_verify_nonce($_POST['nonce'], 'user_register_nonce')){
        wp_send_json_error(['msg' => '非法请求']);
        wp_die();
    }

    $phone = wp_filter_nohtml_kses($_POST['dataForPHP'][0]);
    $name = wp_filter_nohtml_kses($_POST['dataForPHP'][1]);
    $email = wp_filter_nohtml_kses($_POST['dataForPHP'][2]);
    // 生成随机密码,也可以由前端传递
    $password = wp_generate_password(12, false);

    // 完善用户数据数组
    $userdata = [
        'user_login' => $email, // 用邮箱作为登录名,也可替换为手机号
        'user_email' => $email,
        'user_pass' => $password,
        'display_name' => $name,
        'first_name' => $name
    ];

    $user_id = wp_insert_user($userdata);

    if(!is_wp_error($user_id)){
        // 保存手机号到用户自定义字段
        update_user_meta($user_id, 'user_phone', $phone);
        wp_send_json_success(['msg' => '注册成功', 'user_id' => $user_id]);
    } else {
        wp_send_json_error(['msg' => $user_id->get_error_message()]);
    }

    wp_die();
}

方式二:利用user_register钩子实现(符合WordPress钩子机制)

user_register钩子会在用户成功注册(包括通过wp_insert_user创建的用户)后触发,我们可以在钩子函数中保存手机号:

  1. 先注册user_register钩子:
// 注册user_register钩子,优先级10,接受2个参数
add_action('user_register', 'save_user_mobile_field', 10, 2);
function save_user_mobile_field($user_id, $userdata){
    // 从userdata中取出提前存入的手机号
    if(isset($userdata['user_phone'])){
        $clean_phone = wp_filter_nohtml_kses($userdata['user_phone']);
        update_user_meta($user_id, 'user_phone', $clean_phone);
    }
}
  1. 然后修改AJAX函数,把手机号存入$userdata数组(wp_insert_user会忽略未定义的键,但会把完整的$userdata传递给钩子):
add_action('wp_ajax_nopriv_register', 'register_user');
add_action('wp_ajax_register', 'register_user');
function register_user(){
    if(!isset($_POST['dataForPHP']) || !wp_verify_nonce($_POST['nonce'], 'user_register_nonce')){
        wp_send_json_error(['msg' => '非法请求']);
        wp_die();
    }

    $phone = wp_filter_nohtml_kses($_POST['dataForPHP'][0]);
    $name = wp_filter_nohtml_kses($_POST['dataForPHP'][1]);
    $email = wp_filter_nohtml_kses($_POST['dataForPHP'][2]);
    $password = wp_generate_password(12, false);

    $userdata = [
        'user_login' => $email,
        'user_email' => $email,
        'user_pass' => $password,
        'display_name' => $name,
        'first_name' => $name,
        // 自定义键,用于传递给user_register钩子
        'user_phone' => $phone
    ];

    $user_id = wp_insert_user($userdata);

    if(is_wp_error($user_id)){
        wp_send_json_error(['msg' => $user_id->get_error_message()]);
    } else {
        wp_send_json_success(['msg' => '注册成功', 'user_id' => $user_id]);
    }

    wp_die();
}

注意事项

  • 必须添加wp_nonce验证:前端AJAX请求时,要通过wp_create_nonce('user_register_nonce')生成随机数,作为参数传递到后端,防止跨站请求伪造。
  • 用户元字段的键名(比如user_phone)可以自定义,后续获取时保持一致即可,用get_user_meta($user_id, 'user_phone', true)获取。
  • 处理错误情况:wp_insert_user会返回WP_Error对象(比如邮箱已被注册),需要捕获并返回错误信息给前端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:50:26