求助:从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
相关产品推荐
相关产品推荐

