WooCommerce中单个选项商品的缺货置灰功能失效问题
解决WooCommerce单选项商品缺货变体置灰失效的问题
我之前也碰到过一模一样的情况!你用的那段代码只能覆盖多属性变体的场景,因为WooCommerce在处理单一属性选项时,渲染逻辑和多属性不一样——它不会完全触发woocommerce_variation_is_active过滤器,导致缺货的选项没法被置灰禁用。
咱们可以调整代码,同时覆盖单属性和多属性的场景:
// 处理多属性变体的置灰逻辑(保留原代码逻辑) add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 2 ); function grey_out_variations_when_out_of_stock( $is_active, $variation ) { if ( ! $variation->is_in_stock() ) { return false; } return $is_active; } // 新增:处理单属性选项的置灰禁用逻辑 add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'grey_out_single_attribute_out_of_stock', 10, 1 ); function grey_out_single_attribute_out_of_stock( $args ) { global $product; // 只针对单属性商品执行 if ( count( $product->get_variation_attributes() ) !== 1 ) { return $args; } $attribute_name = key( $product->get_variation_attributes() ); $options = $args['options']; foreach ( $options as $key => $option ) { // 匹配当前选项对应的变体ID $variation_id = $product->get_matching_variation( array( $attribute_name => $option ) ); if ( $variation_id ) { $variation = wc_get_product( $variation_id ); // 缺货则标记禁用并添加样式标识 if ( ! $variation->is_in_stock() ) { $args['options'][$key] = '<span class="out-of-stock-variation">' . $option . '</span>'; $args['disabled_options'][] = $option; } } } return $args; }
再补充一点CSS让置灰效果更直观(可以加到主题的自定义CSS面板里):
.out-of-stock-variation { color: #999; font-style: italic; } select option:disabled { color: #999; font-style: italic; }
这样修改后,不管是单属性还是多属性的商品,缺货的变体都会被置灰并禁用,用户没法选择啦!
内容的提问来源于stack exchange,提问作者wordpressstoredev
相关产品推荐
相关产品推荐

