WooCommerce代码修改:允许同仓库属性商品加入同一订单
WooCommerce订单同仓库商品放行限制修改
修改思路
- 获取当前拟加入购物车商品的
pa_warehouse属性值 - 遍历购物车内已有商品,逐一核对仓库属性
- 若购物车中存在不同仓库的商品,拦截添加操作并提示错误;若为空或所有商品仓库属性一致,则允许添加
修改后的完整代码
add_filter( 'woocommerce_add_to_cart_validation', 'wc_limit_orders_by_warehouse', 10, 2 ); function wc_limit_orders_by_warehouse( $passed_validation, $product_id ) { // 获取当前要添加的产品对象 $current_product = wc_get_product( $product_id ); // 获取当前产品的仓库属性 $current_warehouse = $current_product->get_attribute('pa_warehouse'); // 购物车为空时直接放行 if ( WC()->cart->get_cart_contents_count() === 0 ) { return $passed_validation; } // 遍历购物车内已有商品 foreach ( WC()->cart->get_cart() as $cart_item ) { $cart_product = $cart_item['data']; $cart_warehouse = $cart_product->get_attribute('pa_warehouse'); // 检查仓库属性是否不一致 if ( $current_warehouse !== $cart_warehouse ) { wc_add_notice( __( '此商品与购物车内商品分属不同仓库,无法一同下单。请清空购物车或更换同仓库商品。', 'woocommerce' ), 'error' ); return false; } } return $passed_validation; }
代码说明
- 函数名改为
wc_limit_orders_by_warehouse,语义更清晰,便于后续维护 - 通过
wc_get_product()确保正确获取产品对象,兼容简单产品、变体产品两种场景 - 优先判断购物车为空的情况,直接放行,减少不必要的遍历操作
- 遍历购物车时,只要发现任意一件商品仓库属性不一致,立即拦截并给出明确提示
- 错误提示文案贴合业务场景,引导用户操作
内容的提问来源于stack exchange,提问作者Sjors
相关产品推荐
相关产品推荐

