如何在WooCommerce中设置可变产品全部变体缺货时才隐藏产品
WooCommerce可变产品全变体缺货才整体隐藏解决方案
前置操作
首先进入WooCommerce后台「设置」-「产品」-「库存」页面,取消勾选 在目录中隐藏缺货商品 选项,避免原生逻辑和自定义逻辑冲突。
自定义代码实现
将以下代码添加到你的WordPress主题的functions.php文件中,或者使用Code Snippets这类代码插入工具添加:
// 仅当可变产品所有变体都缺货时,从目录隐藏该产品 add_filter( 'woocommerce_product_is_visible', 'custom_hide_variable_if_all_outofstock', 10, 2 ); function custom_hide_variable_if_all_outofstock( $visible, $product_id ) { $product = wc_get_product( $product_id ); // 仅处理可变产品类型 if ( $product->is_type('variable') ) { $all_variants_out = true; // 遍历所有变体校验库存状态 foreach ( $product->get_available_variations() as $variation ) { $variation_obj = wc_get_product( $variation['variation_id'] ); if ( $variation_obj->is_in_stock() ) { $all_variants_out = false; break; } } // 所有变体缺货时隐藏整个产品 if ( $all_variants_out ) { return false; } } // 简单产品等其他类型保持原有可见逻辑 return $visible; } // 禁止单独隐藏可变产品下的缺货变体 add_filter( 'woocommerce_hide_out_of_stock_items', '__return_false' );
逻辑说明
- 代码仅对可变产品生效,简单产品、虚拟产品等其他产品类型的可见性保持原有设置逻辑
- 只要可变产品存在至少1个有库存的变体,产品就会正常在目录展示,且所有变体(包括缺货的)都会正常显示在产品详情页的选项中
- 只有当可变产品的所有变体全部处于缺货状态时,才会将整个产品从商店目录、搜索结果等列表页隐藏
- 缺货的变体在详情页会正常标记缺货状态,不会影响用户的规格选择判断
内容的提问来源于stack exchange,提问作者MrLucas
相关产品推荐
相关产品推荐

