新用户注册成功,进后台发现角色一栏是空的,什么也做不了,手动指派一次才恢复正常,量一大就顶不住。乍看像缓存或者权限的锅,追下去往往不是。
add_action('user_register', function ($uid) {
$u = new WP_User($uid);
$role = get_option('default_role') ?: 'subscriber';
if (empty($u->roles)) $u->set_role($role);
}, 20);
追下去是这么回事:注册流程里有两处写角色,后执行的那处把前一处覆盖成空值,或者默认角色选项被清空了,新号就成了无角色,报错也不明显。
「WordPress 注册默认角色」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
具体做法是,先检查设置里的新用户默认角色是不是被清空了;在注册钩子里显式指派一次角色,不要等默认值;建号之后立刻读一次角色,确认它真的写进去了。
验收就看一点,新注册账号角色为订阅者,登录后能进后台个人资料页,投稿也正常。
