WooCommerce购物车单个可下载产品限制功能异常修复求助
修复WooCommerce购物车仅限制单个可下载商品的代码问题
原代码的问题在于没有区分可下载商品和普通商品,只要商品类型、可下载状态一致且非虚拟商品就阻止添加,导致普通实体商品也无法批量加入购物车。以下是修复后的代码,仅对可下载商品做单个限制,普通商品可正常添加多个:
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_downloadable_product_allowed', 10, 3 ); function only_one_downloadable_product_allowed( $passed, $product_id, $quantity ) { $product = wc_get_product( $product_id ); // 仅当当前添加的是可下载商品时,才执行限制逻辑 if ( $product->is_downloadable() ) { foreach ( WC()->cart->get_cart() as $cart_item ) { // 检查购物车中是否已存在可下载商品 if ( $cart_item['data']->is_downloadable() ) { wc_add_notice( __( "购物车中只能存在一个可下载产品。", "woocommerce" ), 'error' ); return false; } } } return $passed; }
修改说明:
- 新增判断:只有当前要添加的商品是可下载商品时,才触发限制检查
- 简化逻辑:直接检查购物车中是否已有可下载商品,无需额外判断商品类型或虚拟属性
- 普通商品不受影响:非可下载的实体商品可以正常多次添加到购物车
内容的提问来源于stack exchange,提问作者mfan007
相关产品推荐
相关产品推荐

