Fluent Forms提交前无法修改数据库条目问题求助
问题:Fluent Forms提交前无法修改数据库条目
使用fluentform_before_insert_submission钩子尝试修改提交数据,将默认空的group和number字段设为2后插入数据库,但始终失败。原代码如下:
add_action('fluentform_before_insert_submission', 'insert_data', 10, 3); function insert_data($insertData, $data, $form){ if($form->id != 3) { return; } $invitation = $data['id']; if(empty($invitation)){ $data = $insertData['response']; $answer = json_decode($datos); $list = array( "__fluent_form_embded_post_id" => '18', "_fluentform_3_fluentformnonce" => 'f2a87fd348', "_wp_http_referer" => '/reg/', "id" => '', "group" => '2', "number" => '2', "id_medic" => '3TDca98S', "email_medic" => 'medic3@mail.com', "account_medic" => 'basic' ); $mod = json_encode($arreglo); $insertData['response'] = $mod; } return $insertData }
代码中的关键问题
- 钩子类型错误:
fluentform_before_insert_submission是过滤器钩子,必须用add_filter而非add_action——action钩子不会处理返回值,导致修改后的数据无法传递回系统。 - 变量名错误:
$datos未定义,实际应为前面赋值的$data$arreglo未定义,实际应为构造数组的变量名$list
- 语法错误:最后一行
return $insertData缺少分号,会导致代码执行报错。 - 不必要的数组重构:直接替换整个
response会覆盖用户提交的其他字段,应基于原有数据修改指定字段,而非重新构造完整数组。
修正后的代码
add_filter('fluentform_before_insert_submission', 'insert_data', 10, 3); function insert_data($insertData, $data, $form){ // 仅处理ID为3的表单 if($form->id != 3) { return $insertData; } // 安全获取invitation字段,避免字段不存在报错 $invitation = isset($data['id']) ? $data['id'] : ''; if(empty($invitation)){ // 将原提交的JSON数据解码为关联数组 $responseData = json_decode($insertData['response'], true); // 仅修改目标字段,保留其他用户提交的数据 if(is_array($responseData)){ $responseData['group'] = '2'; $responseData['number'] = '2'; // 如需添加固定字段,可在此继续设置 $responseData['id_medic'] = '3TDca98S'; $responseData['email_medic'] = 'medic3@mail.com'; $responseData['account_medic'] = 'basic'; } // 重新编码为JSON并赋值 $insertData['response'] = json_encode($responseData); } return $insertData; }
额外注意事项
- 确保
group和number字段名与表单中设置的字段name属性完全一致,否则无法匹配修改。 - 使用
json_decode(..., true)转为关联数组,比对象更方便字段修改。
内容的提问来源于stack exchange,提问作者tocibacon
相关产品推荐
相关产品推荐

