You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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的模板与变量传递

  1. 修改插件短信模板
    进入WP-SMS的设置页面,找到「新用户注册通知」的模板内容,把默认的%username%替换成自定义变量,比如%user_phone%

  2. 在代码中注入手机号到模板
    如果插件支持自定义变量,你需要在代码里完成变量替换,示例如下:

    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

火山引擎 最新活动