WP-SMS插件新用户注册通知无法获取手机号问题求助
嘿,我来帮你捋捋这个问题的核心原因和解决办法~
为什么短信里显示的是用户名而非手机号?
大概率是下面两个原因中的一个:
代码里没正确获取存储手机号的字段
WordPress的get_userdata()返回的用户对象里,你存手机号的字段实际是user_nicename(注意是带user_前缀的),如果你的代码里误调用了$user->user_login(默认用户名)或者$user->display_name,那短信自然会显示用户名,而非你存在nicename里的手机号。WP-SMS的通知模板没绑定正确变量
就算你代码里拿到了手机号,如果插件的短信模板用的是默认的%username%变量(这个变量默认关联的是user_login),而你没把手机号的值注入到模板替换逻辑里,或者没修改模板变量,结果还是会出错。
怎么解决?
第一步:修正代码里的字段调用
修改你的new_user方法,确保准确获取到存储手机号的字段:
public function new_user( $user_id ) { $user = get_userdata( $user_id ); // 注意字段名是user_nicename,不是nicename $user_phone = $user->user_nicename; // 后续将$user_phone传入短信内容即可 // ... 你的其他发送逻辑 }
第二步:调整WP-SMS的模板与变量传递
修改插件短信模板:
进入WP-SMS的设置页面,找到「新用户注册通知」的模板内容,把默认的%username%替换成自定义变量,比如%user_phone%。在代码中注入手机号到模板:
如果插件支持自定义变量,你需要在代码里完成变量替换,示例如下:public function new_user( $user_id ) { $user = get_userdata( $user_id ); $user_phone = $user->user_nicename; // 获取插件预设的通知模板 $message_template = WP_SMS()->settings['new_user_message']; // 替换模板中的自定义变量为实际手机号 $final_message = str_replace( '%user_phone%', $user_phone, $message_template ); // 发送短信给管理员 wp_sms_send( get_option( 'admin_phone' ), $final_message ); // ... 其他逻辑 }
额外建议
其实不太推荐用user_nicename存储手机号,这个字段原本是用于生成用户友好的URL别名,后续用户修改昵称时可能会覆盖手机号,还可能和WordPress的其他功能冲突。更稳妥的方式是使用自定义用户元字段来存储,比如用update_user_meta($user_id, 'custom_user_phone', $phone)存储手机号,再用get_user_meta($user_id, 'custom_user_phone', true)获取,这样更规范也更安全。
内容的提问来源于stack exchange,提问作者M. Lak




