如何从WooCommerce结账页面获取用于运费计算的收货地址
WooCommerce结账页运费计算收货地址获取方案
该需求完全可实现,WooCommerce用于运费计算的收货地址会优先取结账页用户实时填写/选择的临时地址,而非用户账号中绑定的固定默认地址,你可以通过两种方式获取:
1. 直接读取当前会话运费地址
无需调用Hook,直接使用WC()->customer对象的shipping相关方法即可获取,你之前打印的对象本身就包含了实时同步的运费地址字段:
// 获取完整的运费计算收货地址数组 $shipping_address = WC()->customer->get_shipping(); // 也可以单独获取对应字段,示例: $shipping_country = WC()->customer->get_shipping_country(); $shipping_state = WC()->customer->get_shipping_state(); $shipping_city = WC()->customer->get_shipping_city(); $shipping_postcode = WC()->customer->get_shipping_postcode(); $shipping_address_1 = WC()->customer->get_shipping_address_1(); $shipping_address_2 = WC()->customer->get_shipping_address_2();
上述代码返回的地址和WooCommerce当前会话运费计算调用的地址完全一致,自动同步了用户在结账页修改后还未提交订单的临时地址。如果你的站点开启了「账单地址作为收货地址」配置,返回结果会自动同步为用户填写的账单地址,和系统运费计算逻辑保持一致。
2. 钩子监听获取运费计算地址
如果你需要在运费计算、订单创建的节点动态获取/修改地址,可以使用对应钩子:
- 运费计算过程中获取地址:用
woocommerce_after_calculate_totals钩子
add_action('woocommerce_after_calculate_totals', 'get_shipping_address_during_calculate', 10, 1); function get_shipping_address_during_calculate($cart) { $current_calc_shipping_address = $cart->get_customer()->get_shipping(); // 此处写入你的业务逻辑 }
- 结账提交订单时获取对应运费地址:用
woocommerce_checkout_create_order钩子
add_action('woocommerce_checkout_create_order', 'get_shipping_address_when_submit_order', 10, 2); function get_shipping_address_when_submit_order($order, $data) { $order_shipping_address = $order->get_address('shipping'); // 此处写入你的业务逻辑 }
内容的提问来源于stack exchange,提问作者sylargaf
相关产品推荐
相关产品推荐

