WordPress如何基于Elementor Pro表单提交值计算用户数据并更新自定义元字段
问题排查与修复方案
原有代码错误点
get_user_meta参数顺序错误:WordPress官方要求该函数参数顺序为用户ID、字段键名、是否返回单值,你的代码写反了字段名和用户参数,且未设置第三个参数为true,导致返回结果是数组而非数值,无法直接参与计算。- 数值计算不规范:乘以
'100'时使用了字符串格式,应直接使用数值100避免类型转换错误。 update_user_meta调用错误:第一个参数需要传入用户ID,且第三个参数用单引号包裹变量,单引号不会解析PHP变量,实际存入的是字符串$straight_acceleration_percent_value而非计算得到的数值。- 缺少触发逻辑:代码没有绑定Elementor表单提交的事件钩子,表单提交后不会自动执行该段逻辑。
正确实现代码
将以下代码添加到当前使用主题的functions.php文件中,或通过代码片段类插件插入即可生效:
// 绑定Elementor Pro表单提交事件 add_action('elementor_pro/forms/new_record', function($record, $handler) { // 可选:仅指定触发表单,替换为你实际的表单名称 $target_form_name = 'your_form_name'; $current_form_name = $record->get_form_settings('form_name'); if ($target_form_name !== $current_form_name) { return; } // 仅登录用户执行逻辑 if (!is_user_logged_in()) { return; } $user_id = get_current_user_id(); // 直接读取表单提交的最新straight_speed值,无需二次查询数据库 $straight_speed = 0; $all_fields = $record->get('fields'); foreach ($all_fields as $field) { // 替换为你表单中straight_speed字段的实际ID if ($field['id'] === 'straight_speed') { $straight_speed = intval($field['value']); break; } } // 计算对应百分比值 $straight_speed_percent = $straight_speed * 100; // 更新用户元数据,字段不存在则自动新增,已存在则覆盖更新 update_user_meta($user_id, 'straight_speed_percent', $straight_speed_percent); }, 10, 2);
注意事项
- 请将代码中的
your_form_name替换为你在Elementor表单后台设置的表单名称 - 请确认
straight_speed对应你表单中该字段的实际ID设置 - 请核对存储的元字段名是否和你预设的
straight_speed_percent一致,你原有代码中写的是straight_acceleration_percent,避免字段名不匹配导致存储失败
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

