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

Woocommerce下单后同步账单字段及反向更新usermeta报错求助

问题排查

你的代码存在3个核心错误导致报错、自定义字段无法更新:

  • 钩子注册错误:漏写add_前缀,注册WordPress动作钩子必须使用add_action
  • 自定义账单字段取值错误:billing_piva、billing_code_sdi属于自定义的WooCommerce账单字段,WC订单对象默认没有对应的get_billing_piva()、get_billing_code_sdi()内置方法,自定义字段需要通过get_meta()方法读取
  • 未校验用户登录状态:如果是游客下单没有关联用户ID,$user_id为0时调用update_user_meta会直接触发报错

修正后可正常运行代码

add_action( 'woocommerce_thankyou', 'update_usermeta_from_billing_checkout', 10, 1 );
function update_usermeta_from_billing_checkout( $order_id ) {
    $order = wc_get_order( $order_id );
    // 校验订单有效、且为登录用户下单再执行更新
    if ( !$order || $order->get_user_id() === 0 ) {
        return;
    }
    $user_id = $order->get_user_id();
    
    // 原生WC账单字段用内置方法取值
    update_user_meta( $user_id, 'first_name', $order->get_billing_first_name() ); 
    update_user_meta( $user_id, 'last_name', $order->get_billing_last_name() );
    update_user_meta( $user_id, 'user_email', $order->get_billing_email() );
    update_user_meta( $user_id, 'company', $order->get_billing_company() );
    update_user_meta( $user_id, 'telefono', $order->get_billing_phone() );
    
    // 自定义账单字段通过get_meta方法取值
    update_user_meta( $user_id, 'vat', $order->get_meta( 'billing_piva' ) ); 
    update_user_meta( $user_id, 'sdi', $order->get_meta( 'billing_code_sdi' ) ); 
}

补充提示

如果需要避免双向同步触发死循环,可以在其中一个同步钩子的逻辑执行前,临时移除另一个同步钩子,逻辑执行完成后再恢复钩子即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:24:07