如何隐藏WooCommerce可变产品页面下拉菜单特定变体,仅显示低价有库存变体
WooCommerce可变产品页面隐藏特定变体的解决方案
要实现仅显示价格最低且库存>0的变体,你之前的方法无法生效,因为variation_is_visible是WooCommerce动态计算的属性,并非直接存储的元数据,直接修改变体对象的属性不会影响最终的可用变体列表。
正确的做法是使用WooCommerce的钩子来过滤可用变体,以下是完整代码:
add_filter( 'woocommerce_get_available_variations', 'filter_only_cheapest_in_stock_variation', 10, 2 ); function filter_only_cheapest_in_stock_variation( $available_variations, $product ) { // 仅针对可变产品 if ( ! $product->is_type( 'variable' ) ) { return $available_variations; } // 筛选出库存>0的变体 $in_stock_variations = array_filter( $available_variations, function( $variation ) { return $variation['is_in_stock'] === true; } ); // 如果没有有库存的变体,直接返回 if ( empty( $in_stock_variations ) ) { return $available_variations; } // 找到价格最低的变体 usort( $in_stock_variations, function( $a, $b ) { return $a['display_price'] - $b['display_price']; } ); $cheapest_variation = reset( $in_stock_variations ); // 仅保留价格最低的那个变体 return array( $cheapest_variation ); }
代码说明:
- 钩子
woocommerce_get_available_variations会在WooCommerce准备可用变体列表时触发,我们在这里过滤掉不符合要求的变体。 - 先筛选出所有有库存的变体,再通过排序找到价格最低的那个,最后只保留这个变体返回。
- 将代码添加到你的主题
functions.php文件,或者自定义插件中,不要直接修改WooCommerce核心文件。
为什么之前的方法无效:
variation_is_visible是WooCommerce在生成$available_variations数组时,根据变体的库存、可见性设置等动态计算出来的临时属性,并非存储在数据库中的元数据。直接调用set_catalog_visibility或修改variation_is_visible元数据,不会影响这个动态生成的属性值。
内容的提问来源于stack exchange,提问作者Rip
相关产品推荐
相关产品推荐

