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

订单完成后更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:16:12