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

WpForms:调整表单提交至数据库前的提交数据

解决WPForms提交时下拉框值未替换为value_raw的问题

我明白你遇到的问题了——你已经在wpforms_process钩子中修改了$fields数组,并且通过echo看到修改后的数据是对的,但数据库里保存的还是原始的下拉框文本值。这是因为你只修改了用于显示/邮件的$fields,但没有修改最终保存到数据库的$entry数组。

修正后的代码

function wpf_dev_process( $fields, $entry, $form_data ) {
    // 只针对ID为66203的表单处理
    if ( absint( $form_data['id'] ) !== 66203 ) {
        return array( $fields, $entry );
    }

    foreach ( $fields as $key => &$value ){
        if ( $fields[$key]["type"] == "select" ){
            // 修改fields中的值(用于前端显示、邮件发送等场景)
            $fields[$key]["value"] = $fields[$key]["value_raw"];
            // 同步修改entry中的对应字段值(这才是最终保存到数据库的内容)
            if ( isset( $entry[ $key ] ) ) {
                $entry[ $key ] = $fields[$key]["value_raw"];
            }
        }
    }

    // 建议用error_log调试,避免前端输出干扰表单提交流程
    // error_log( print_r( $entry, true ) );

    return array( $fields, $entry );
}
add_action( 'wpforms_process', 'wpf_dev_process', 10, 3 );

关键说明

  1. $entry数组才是核心:WPForms的wpforms_process钩子允许同时修改$fields和$entry两个数组,其中数据库最终存储的是$entry里的数据,所以必须同步修改它才能让替换后的值存入数据库。
  2. 字段键匹配逻辑:$fields和$entry中的键都是表单字段的ID,所以可以直接用遍历得到的$key来对应修改$entry里的对应值。
  3. 调试方式优化:你之前用echo输出调试内容会直接显示在页面上,可能干扰表单提交的正常流程,建议改用error_log,可以在服务器的PHP错误日志里查看修改后的$entry数据。

另外,如果你只需要调整数据库存储的内容,也可以使用更聚焦的wpforms_process_entry_save钩子,这个钩子专门用于修改即将保存到数据库的条目数据:

function wpf_dev_save_entry_data( $entry, $form_data ) {
    if ( absint( $form_data['id'] ) !== 66203 ) {
        return $entry;
    }

    // 遍历表单字段配置,找到select类型的字段
    foreach ( $form_data['fields'] as $field ) {
        if ( $field['type'] === 'select' && isset( $entry[ $field['id'] ] ) ) {
            // 将对应条目值替换为value_raw
            $entry[ $field['id'] ] = $field['value_raw'];
        }
    }

    return $entry;
}
add_filter( 'wpforms_process_entry_save', 'wpf_dev_save_entry_data', 10, 2 );

这个钩子的优势是直接操作要保存的$entry,不需要关心$fields的修改,更适合只调整数据库存储内容的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:27:33