订单完成后更新WooCommerce订单元数据失败,update_meta_data未保存?
问题原因及解决办法
你遇到的问题核心是:调用update_meta_data后没有手动保存订单对象。
- 在
woocommerce_checkout_create_order钩子中,WooCommerce的订单创建流程会自动调用订单对象的save()方法,所以你添加的my_test元数据会被自动保存到数据库。 - 而
woocommerce_payment_complete_order_status_completed钩子是在订单状态切换完成后触发的,此时订单对象已经存在于数据库中,你修改了元数据但没有执行保存操作,内存中的修改不会同步到数据库。
修正后的代码
只需要在第二个函数末尾加上$order->save()即可:
add_action('woocommerce_checkout_create_order', 'ap_woocommerce_checkout_create_order', 20, 2); function ap_woocommerce_checkout_create_order( $order, $data ) { $order->update_meta_data( 'my_test', '123' ); } add_action( 'woocommerce_payment_complete_order_status_completed', 'ap_woocommerce_payment_complete_order_status_completed' ); function ap_woocommerce_payment_complete_order_status_completed($order_id){ $order = wc_get_order( $order_id ); $order->update_meta_data( 'my_test2', 'abc' ); // 新增:保存订单,将元数据写入数据库 $order->save(); }
验证方法
修改后重新触发支付完成流程,再用你的查询代码检查:
$order = wc_get_order( $order_id ); $my_test = $order->get_meta('my_test'); // 输出123 $my_test2 = $order->get_meta('my_test2'); // 输出abc
内容的提问来源于stack exchange,提问作者Toniq
相关产品推荐
相关产品推荐

