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

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
}

代码中的关键问题

  1. 钩子类型错误:fluentform_before_insert_submission是过滤器钩子,必须用add_filter而非add_action——action钩子不会处理返回值,导致修改后的数据无法传递回系统。
  2. 变量名错误:
    • $datos未定义,实际应为前面赋值的$data
    • $arreglo未定义,实际应为构造数组的变量名$list
  3. 语法错误:最后一行return $insertData缺少分号,会导致代码执行报错。
  4. 不必要的数组重构:直接替换整个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:25:09