You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WooCommerce中设置折扣率最高的有货变体为默认项

修改WooCommerce可变产品默认选中变体为折扣率最高的有货变体

基于你提到的原代码,以下是修改后的代码,可实现将WooCommerce可变产品的默认选中变体设置为库存中折扣率最高的有货变体:

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'custom_wc_dropdown_variation_args', 10, 1 );
function custom_wc_dropdown_variation_args( $args ) {
    // 仅针对可变产品
    if ( ! is_product() || ! $args['product']->is_type('variable') ) {
        return $args;
    }

    $product = $args['product'];
    $highest_discount_variation = null;
    $max_discount_rate = 0;

    // 遍历所有变体
    foreach ( $product->get_available_variations() as $variation ) {
        $variation_obj = wc_get_product( $variation['variation_id'] );
        
        // 跳过无库存的变体
        if ( ! $variation_obj->is_in_stock() ) {
            continue;
        }

        // 获取常规价格和销售价格
        $regular_price = (float) $variation_obj->get_regular_price();
        $sale_price = (float) $variation_obj->get_sale_price();

        // 仅计算有折扣的变体(销售价格 < 常规价格)
        if ( $sale_price > 0 && $sale_price < $regular_price ) {
            // 计算折扣率:(原价-现价)/原价 * 100
            $discount_rate = ( ( $regular_price - $sale_price ) / $regular_price ) * 100;
            
            // 更新最高折扣率对应的变体
            if ( $discount_rate > $max_discount_rate ) {
                $max_discount_rate = $discount_rate;
                $highest_discount_variation = $variation;
            }
        }
    }

    // 如果找到折扣率最高的变体,设置为默认选中
    if ( $highest_discount_variation ) {
        foreach ( $args['attributes'] as $attribute => $value ) {
            if ( isset( $highest_discount_variation['attributes'][ 'attribute_' . $attribute ] ) ) {
                $args['selected'] = $highest_discount_variation['attributes'][ 'attribute_' . $attribute ];
            }
        }
    } else {
        // 如果没有找到有折扣的变体,自动选择第一个有库存的变体
        foreach ( $product->get_available_variations() as $variation ) {
            $variation_obj = wc_get_product( $variation['variation_id'] );
            if ( $variation_obj->is_in_stock() ) {
                foreach ( $args['attributes'] as $attribute => $value ) {
                    if ( isset( $variation['attributes'][ 'attribute_' . $attribute ] ) ) {
                        $args['selected'] = $variation['attributes'][ 'attribute_' . $attribute ];
                    }
                }
                break;
            }
        }
    }

    return $args;
}

代码说明:

  • 先筛选出当前可变产品下所有有库存的变体
  • 对每个带折扣的变体(销售价格低于常规价格)计算折扣率,锁定折扣率最高的变体
  • 若存在符合条件的变体,将其属性设置为默认选中项
  • 若没有找到带折扣的有货变体,自动选择第一个有库存的变体(这部分逻辑可根据自身需求调整)

内容的提问来源于stack exchange,提问作者Lupani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:52:12