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

求助:从WooCommerce订单获取自定义字段更新Gravity Form条目失败

问题排查与修复方案

代码中的核心问题

  • 自定义字段获取方式错误:你用$fieldnumber($order_id, 'paymentnumber', true);这种写法完全无效,WooCommerce获取订单自定义字段必须通过订单对象的get_meta()方法,且需要将结果赋值给变量。
  • 错误覆盖订单ID:$order_id = $order->get_order_number();会把传入的原始订单ID(数据库ID)覆盖为前台显示的订单号(可能带前缀),导致后续依赖真实订单ID的操作出错。
  • Gravity Forms更新逻辑错误:rgar( $entrynumber, 'id' )逻辑混乱,若bookingnumber存储的是Gravity Forms条目ID,直接使用该值即可,无需额外处理。
  • 订单实例化方式过时:新版本WooCommerce推荐用wc_get_order()函数获取订单对象,而非直接实例化WC_Order。

修复后的代码

add_action( 'woocommerce_payment_complete','sendtoformentry');
function sendtoformentry($order_id) {
    // 获取订单对象(兼容WooCommerce新版本)
    $order = wc_get_order( $order_id );
    
    // 订单不存在则终止执行
    if ( ! $order ) {
        return;
    }

    // 获取订单自定义字段值
    $target_field_id = $order->get_meta( 'paymentnumber', true );
    $gf_entry_id = $order->get_meta( 'bookingnumber', true );

    // 字段值有效时,更新Gravity Forms条目
    if ( $gf_entry_id && $target_field_id ) {
        GFAPI::update_entry_field( $gf_entry_id, $target_field_id, 'paid' );
    }
}

额外说明

  • 确认paymentnumber对应的是Gravity Forms中需要更新的字段数字ID,bookingnumber确实存储了目标Gravity Forms条目的ID。
  • 添加了订单存在性和字段有效性检查,避免因数据缺失触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:07:12