WooCommerce Local Pickup Plus:取件点地址同步订单配送地址问题
解决方案
你的代码核心问题是未正确获取Local Pickup Plus取件点的地址数据,导致$address_1等变量未定义,最终清空了订单配送地址。以下是修正后的实现思路和代码:
关键思路
Local Pickup Plus会将选中的取件点ID存储在配送方式的元数据中,我们可以通过这个ID实例化取件点对象,从中提取完整的地址信息,再赋值给订单。
修正后的代码
add_action('woocommerce_checkout_create_order', function($order){ foreach($order->get_shipping_methods() as $method){ // 确认是Local Pickup Plus配送方式 if($method->get_method_id() === 'local_pickup_plus'){ // 获取取件点ID $location_id = $method->get_meta('_pickup_location_id'); if($location_id && class_exists('WC_Location')){ // 实例化取件点对象,获取地址数据 $location = new WC_Location($location_id); // 将取件点地址赋值给订单配送地址 $order->set_shipping_country($location->get_country()); $order->set_shipping_address_1($location->get_address()); $order->set_shipping_address_2($location->get_address_2()); $order->set_shipping_postcode($location->get_postcode()); $order->set_shipping_city($location->get_city()); } break; } } });
额外说明
- 确保
WC_Location类可用:这个类是Local Pickup Plus插件提供的核心类,只要插件激活就会加载。 - 兼容性:如果你的Local Pickup Plus版本较旧,取件点元数据的键可能不同,可以通过查看订单配送方式的元数据(在wp_postmeta表中,关联订单ID和配送方式ID)确认正确的键名。
- 测试:修改代码后,创建测试订单选择自提,查看订单详情页的配送地址是否已替换为取件点地址,同时导出订单验证数据是否正确。
内容的提问来源于stack exchange,提问作者Diadh
相关产品推荐
相关产品推荐

