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

WooCommerce代码修改:允许同仓库属性商品加入同一订单

WooCommerce订单同仓库商品放行限制修改

修改思路

  1. 获取当前拟加入购物车商品的pa_warehouse属性值
  2. 遍历购物车内已有商品,逐一核对仓库属性
  3. 若购物车中存在不同仓库的商品,拦截添加操作并提示错误;若为空或所有商品仓库属性一致,则允许添加

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:27:16