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

WordPress注册邮件通知无法显示2个用户元字段数据求助

WordPress注册通知邮件自定义字段无法显示问题排查

问题描述

使用下方代码实现用户注册后向管理员发送通知邮件,后台用户的tp_phone_number(电话)和description(公司)字段已填写完整,但邮件中这两个字段始终显示为N/A,尝试添加update_user_meta同步数据也未解决。

原代码

function custom_registration_notification($user_id) {
    $user = get_userdata($user_id);
    $admin_email = 'admin@hl.de'; // 接收通知的管理员邮箱
    $subject = 'Neue Registrierung auf www.hl.de';

    // 用户基础信息
    $username = $user->user_login;
    $user_email = $user->user_email;

    // 获取用户自定义字段
    $first_name = get_user_meta($user_id, 'first_name', true);
    $last_name = get_user_meta($user_id, 'last_name', true);
    $tp_phone_number = get_user_meta($user_id, 'tp_phone_number', true);
        update_user_meta($user_id, 'tp_phone_number', $tp_phone_number);
    $description = get_user_meta($user_id, 'description', true);
        update_user_meta($user_id, 'description', $description);

    // 为空字段设置默认值
    if (empty($first_name)) {
        $first_name = 'N/A';
    }
    if (empty($last_name)) {
        $last_name = 'N/A';
    }
    if (empty($tp_phone_number)) {
        $tp_phone_number = 'N/A';
    }
    if (empty($description)) {
        $description = 'N/A';
    }

    $message = 'Ein neuer Benutzer hat sich auf der Website registriert:' . "\n\n";
    $message .= 'Vorname: ' . $first_name . "\n";
    $message .= 'Nachname: ' . $last_name . "\n";
    $message .= 'E-Mail: ' . $user_email . "\n";
    $message .= 'Telefonnummer: ' . $tp_phone_number . "\n";
    $message .= 'Unternehmen: ' . $description . "\n";

    wp_mail($admin_email, $subject, $message);
    error_log('Custom Registration Error: ' . print_r($tp_phone_number, true));
}
add_action('user_register', 'custom_registration_notification');

问题原因分析

  1. 钩子触发时机不对:user_register钩子在用户账号创建完成后立即触发,但如果注册表单是通过插件或自定义代码实现的,tp_phone_number、description这类额外字段可能在user_register之后才被写入数据库,此时调用get_user_meta自然取不到数据。
  2. 冗余代码无效:代码里的update_user_meta完全没用——刚从数据库取出值,又把相同的值写回去,对解决字段为空的问题没有任何帮助。
  3. 字段键名可能不匹配:需确认注册表单提交时,电话和公司字段的name属性是否与tp_phone_number、description完全一致,键名大小写、拼写错误都会导致取数失败。

解决方案

1. 更换触发钩子

将user_register替换为profile_update,该钩子在用户资料(包括注册时的额外字段)保存完成后触发,确保能取到所有字段数据。同时添加判断,避免重复发送邮件:

function custom_registration_notification($user_id, $old_user_data) {
    // 仅在用户首次注册时触发(旧数据为空即为新用户)
    if (empty($old_user_data->ID)) {
        $user = get_userdata($user_id);
        $admin_email = 'admin@hl.de';
        $subject = 'Neue Registrierung auf www.hl.de';

        $username = $user->user_login;
        $user_email = $user->user_email;

        $first_name = get_user_meta($user_id, 'first_name', true);
        $last_name = get_user_meta($user_id, 'last_name', true);
        $tp_phone_number = get_user_meta($user_id, 'tp_phone_number', true);
        $description = get_user_meta($user_id, 'description', true);

        if (empty($first_name)) $first_name = 'N/A';
        if (empty($last_name)) $last_name = 'N/A';
        if (empty($tp_phone_number)) $tp_phone_number = 'N/A';
        if (empty($description)) $description = 'N/A';

        $message = 'Ein neuer Benutzer hat sich auf der Website registriert:' . "\n\n";
        $message .= 'Vorname: ' . $first_name . "\n";
        $message .= 'Nachname: ' . $last_name . "\n";
        $message .= 'E-Mail: ' . $user_email . "\n";
        $message .= 'Telefonnummer: ' . $tp_phone_number . "\n";
        $message .= 'Unternehmen: ' . $description . "\n";

        wp_mail($admin_email, $subject, $message);
        error_log('Custom Registration Phone: ' . print_r($tp_phone_number, true));
    }
}
add_action('profile_update', 'custom_registration_notification', 10, 2);

2. 移除冗余代码

删除原代码中这两行无用的update_user_meta代码:

update_user_meta($user_id, 'tp_phone_number', $tp_phone_number);
update_user_meta($user_id, 'description', $description);

3. 验证字段键名正确性

检查注册表单中电话字段的name是否为tp_phone_number,公司字段是否对应description(部分主题/插件可能使用自定义键名,比如company而非description)。

4. 增强日志排查

在获取字段后添加日志,确认实际取到的值,方便定位问题:

error_log('Phone Meta Value: ' . print_r($tp_phone_number, true));
error_log('Description Meta Value: ' . print_r($description, true));

通过查看WordPress日志(通常在wp-content/debug.log),确认字段是否真的未被写入数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:43:12