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

如何从嵌入Gravity Form指定字段填充WooCommerce订单自定义字段

实现方案

核心逻辑:Gravity Forms Product Add-ons 会在用户加购时关联表单提交条目和购物车项目,下单完成后自动完成条目和订单的绑定,直接使用插件提供的专属钩子即可准确拿到表单数据,不需要额外做条目和订单的映射匹配。

前置参数确认

先把三个关键参数找对,避免代码运行出错:

  • 目标表单ID:进入Gravity Forms表单列表,将鼠标悬浮在表单编辑链接上,从URL参数id=xx中获取
  • 待提取字段ID:进入目标表单编辑页,点击需要提取数据的字段,右侧配置面板顶部会显示该字段的数字ID
  • 订单自定义字段元键(meta key):进入WooCommerce Admin Custom Order Fields的字段列表,找到你创建的目标字段,从配置项中获取对应的元键,该插件生成的元键格式一般为wc_acof_xx

代码实现

使用Gravity Forms Product Add-ons专属钩子gform_woocommerce_post_create_order,该钩子触发时机为订单创建完成、表单条目和订单关联完成后,可以稳定拿到表单数据和订单ID。
不要使用通用的woocommerce_new_order或gform_after_submission钩子:前者触发时GF数据还未完成绑定拿不到值,后者触发时用户仅完成加购、订单还未生成,无法写入订单字段。

将以下代码插入当前主题的functions.php文件,或使用代码片段插件添加即可,不要直接修改插件核心文件:

add_action( 'gform_woocommerce_post_create_order', 'sync_gf_field_to_order_meta', 10, 3 );
function sync_gf_field_to_order_meta( $order_id, $entry, $form ) {
    // 替换为你的目标表单ID
    $target_form_id = 3;
    // 替换为你要提取的GF字段ID
    $target_field_id = 5;
    // 替换为你的订单自定义字段元键
    $target_order_meta_key = 'wc_acof_2';

    // 非目标表单直接终止,避免数据误写
    if ( (int)$form['id'] !== $target_form_id ) {
        return;
    }

    // 从表单条目中读取目标字段值,rgar是Gravity Forms内置的安全读取数组值的函数
    $field_value = rgar( $entry, $target_field_id );

    // 字段值为空时不写入,避免覆盖已有有效数据
    if ( empty( $field_value ) ) {
        return;
    }

    //  sanitize处理后写入订单自定义字段,普通文本字段用sanitize_text_field即可
    update_post_meta( $order_id, $target_order_meta_key, sanitize_text_field( $field_value ) );
}

验证与适配

  1. 代码添加完成后,在前台走完整购买流程,提交包含目标表单的商品订单
  2. 进入后台订单编辑页,检查目标自定义字段是否已经自动填充了表单中填写的对应值
  3. 如果未正常写入,优先检查三个配置的ID/元键是否正确,以及是否有服务器缓存导致新代码未生效
  4. 如果要提取的是多选、文件上传类特殊字段,替换代码中对应的sanitize函数即可:比如文件上传字段存储URL时用esc_url_raw处理,多选字段存储数组时不需要转义字符串,直接传入处理好的数组值即可。

如果同一个商品页嵌入了多个不同的Gravity Form,只需要在代码中增加表单ID的判断分支,分别匹配对应字段和订单元键即可,不需要重复挂载钩子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:03:55