如何让函数仅作用于指定WooCommerce商品分类并调整价格显示
WooCommerce可变商品价格自定义解决方案
以下是针对你需求修改后的代码,同时满足「仅作用于特定分类」和「显示排序后第4个价格」两个要求:
// Hide Price Range for WooCommerce Variable Products (Only for Specific Category) add_filter( 'woocommerce_variable_sale_price_html', 'lw_variable_product_price', 10, 2 ); add_filter( 'woocommerce_variable_price_html', 'lw_variable_product_price', 10, 2 ); function lw_variable_product_price( $v_price, $v_product ) { // 指定要生效的商品分类(替换成你的分类slug/ID,多个用数组) $target_categories = array( 'fabric', 'textiles' ); if ( ! has_term( $target_categories, 'product_cat', $v_product->get_id() ) ) { return $v_price; // 不属于目标分类,直接返回原价格 } // 获取所有变体的销售价格并排序 $all_variation_prices = array(); foreach ( $v_product->get_available_variations() as $variation ) { $all_variation_prices[] = $variation['display_price']; } sort( $all_variation_prices ); // 从低到高排序 // 取排序后第4个价格(索引3),变体不足4个则 fallback到最低价格 $selected_sale_price = count( $all_variation_prices ) >= 4 ? $all_variation_prices[3] : $all_variation_prices[0]; $prod_price = sprintf( __( '%1$s per metre.', 'woocommerce' ), wc_price( $selected_sale_price ) ); // 获取所有变体的常规价格并排序 $all_regular_prices = array(); foreach ( $v_product->get_available_variations() as $variation ) { $all_regular_prices[] = $variation['display_regular_price']; } sort( $all_regular_prices ); // 取排序后第4个常规价格,不足4个则取最低 $selected_regular_price = count( $all_regular_prices ) >= 4 ? $all_regular_prices[3] : $all_regular_prices[0]; $regular_price = sprintf( __( '%1$s per metre.', 'woocommerce' ), wc_price( $selected_regular_price ) ); // 处理促销价和常规价不同的显示逻辑 if ( $prod_price !== $regular_price ) { $prod_price = '<del>' . $regular_price . $v_product->get_price_suffix() . '</del> <ins>' . $prod_price . $v_product->get_price_suffix() . '</ins>'; } return $prod_price; }
关键改动说明
- 限定作用分类:通过
has_term函数判断商品所属分类,把$target_categories里的示例值换成你需要的分类slug或ID即可,非目标分类的商品会保持原有价格显示,不会添加per metre单位。 - 获取第4个价格:不再只取价格的最值,而是收集所有变体的价格并排序,取索引为3的元素(对应第4个价格);同时做了容错处理,如果变体数量少于4个,自动切换为显示最低价格,避免报错。
- 保留原有促销价逻辑:原代码中促销价和常规价的对比显示逻辑被保留,仅调整了价格的取值规则。
内容的提问来源于stack exchange,提问作者whymatt
相关产品推荐
相关产品推荐

