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
相关产品推荐
相关产品推荐

