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

如何在WordPress中通过Simple JWT插件实现自定义用户元数据

解决Simple JWT Login插件自定义用户元数据无法保存的问题

问题核心分析

用户注册流程能正常完成,但自定义元字段tel和adresa无法保存、返回值为空,问题集中在请求参数格式错误、WordPress元字段注册逻辑不规范、插件配置未同步三个方面。


1. 修正React Native端Axios请求参数

错误点:

  • 手动拼接user_meta时使用了中文引号(”),导致JSON解析失败
  • POST请求参数放在params(URL查询参数)中,易出现编码问题且不符合REST规范
  • 未正确设置Content-Type请求头

修改后的代码:

const options = {
  method: 'POST',
  url: 'XXX', // 替换为你的WordPress站点URL
  params: {
    rest_route: '/simple-jwt-login/v1/users',
    AUTH_KEY: 'XXX' // 替换为你的插件AUTH_KEY
  },
  data: {
    email: email,
    password: password,
    user_login: username,
    display_name: imeIPrezime.split(" ")[0],
    first_name: imeIPrezime.split(" ")[0],
    // 用JSON.stringify生成标准JSON字符串,避免手动拼接错误
    user_meta: JSON.stringify({
      tel: tel,
      adresa: adresa
    })
  },
  headers: {
    'Content-Type': 'application/json',
    'User-Agent': 'insomnia/8.6.1'
  }
};

console.log(options.data.user_meta); // 验证JSON格式是否正确

axios.request(options).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error.response?.data || error.message);
});

2. 规范WordPress端自定义元字段注册

错误点:

  • 使用init钩子注册REST相关元字段,时机过早
  • 重复使用register_rest_field,而register_meta已通过show_in_rest: true暴露字段
  • 未设置auth_callback,导致写入权限不足

正确的注册代码(放在主题functions.php或自定义插件中):

function NKWP_register_custom_user_meta_fields() {
    // 注册电话号码字段
    register_meta('user', 'tel', [
        'type' => 'string',
        'description' => '用户联系电话',
        'single' => true,
        'show_in_rest' => true, // 暴露到REST API
        'auth_callback' => function() {
            // 允许创建用户时写入该字段,可根据需求调整权限
            return current_user_can('create_users');
        }
    ]);

    // 注册地址字段
    register_meta('user', 'adresa', [
        'type' => 'string',
        'description' => '用户居住地址',
        'single' => true,
        'show_in_rest' => true,
        'auth_callback' => function() {
            return current_user_can('create_users');
        }
    ]);
}
// 使用rest_api_init钩子,确保在REST API初始化时注册
add_action('rest_api_init', 'NKWP_register_custom_user_meta_fields');

3. 同步Simple JWT Login插件配置

进入WordPress后台 → Simple JWT Login → Settings → Custom User Meta,在“Allowed Custom User Meta Fields”输入框中添加tel,adresa(逗号分隔)并保存。这一步是让插件明确允许写入这两个自定义元字段。


4. 调试验证步骤

  1. 发送请求前,查看控制台输出的user_meta值,确认是标准JSON格式(如{"tel":"13800138000","adresa":"北京市朝阳区"})
  2. 用户注册完成后,直接在WordPress后台编辑该用户,查看“自定义字段”区域是否存在tel和adresa字段并带有对应值
  3. 若问题仍存在,开启WordPress调试模式:在wp-config.php中添加以下代码,查看wp-content/debug.log中的错误信息
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:32:03