如何在WooCommerce中将缺货商品加入购物车?代码失效求助
解决WooCommerce缺货商品无法加入购物车的问题
你的代码存在语法错误和逻辑缺陷,导致无法正常生效,以下是修正后的完整方案:
问题分析
- 代码中存在HTML转义字符(如
"、&&、->),这些字符会导致PHP语法解析失败 - 变量商品的处理逻辑不合理,父产品的 purchasable 状态判断无法直接覆盖变体的限制
修正后的代码
add_filter('woocommerce_is_purchasable', 'allow_out_of_stock_add_to_cart', 20, 2); function allow_out_of_stock_add_to_cart($purchasable, $product) { // 允许缺货、预售状态的商品加入购物车 if (in_array($product->get_stock_status(), array('out_of_stock', 'onbackorder'))) { return true; } return $purchasable; } // 单独处理变量商品的变体 add_filter('woocommerce_variation_is_purchasable', 'allow_out_of_stock_variations_add_to_cart', 20, 2); function allow_out_of_stock_variations_add_to_cart($purchasable, $variation) { if (in_array($variation->get_stock_status(), array('out_of_stock', 'onbackorder'))) { return true; } return $purchasable; }
关键调整说明
- 提升钩子优先级至20,确保自定义逻辑能覆盖WooCommerce默认的判断规则
- 拆分普通商品与变量商品变体的处理逻辑,避免逻辑冲突
- 移除冗余的
!$purchasable判断,直接强制允许指定库存状态的商品可购买 - 替换所有HTML转义字符为标准PHP语法符号,保证代码可正常执行
额外注意事项
- 检查WooCommerce全局库存设置,确保未勾选“禁止缺货商品下单”类选项
- 测试前清空网站缓存,避免旧代码逻辑残留
内容的提问来源于stack exchange,提问作者Goga Trapaidze
相关产品推荐
相关产品推荐

