代码之家  ›  专栏  ›  技术社区  ›  Sonjoy Datta

如果在Woomerce中使用特定优惠券,则更改统一费率的运输方法成本

  •  2
  • Sonjoy Datta  · 技术社区  · 6 年前

    我有一张特别的优惠券 special50 . 当有人将此优惠券应用于商店时,则需要添加新的配送方法。当当前运输方式价格为50美元(统一费率)并且在应用优惠券新运输方式之后,定价将为25美元。总之,如果您使用此优惠券,您将获得50%的产品折扣(Woomcommerce已经提供给我们)和50%的运费折扣(这是我真正需要的)。

    add_action( 'woocommerce_flat_rate_shipping_add_rate', 'add_another_custom_flat_rate', 10, 2 );
        function add_another_custom_flat_rate( $method, $rate ) {
            $new_rate          = $rate;
            $new_rate['id']    .= ':' . 'custom_rate_name';
            $new_rate['label'] = 'Shipping and handling'; 
        global $woocommerce, $wpdb;
            $coupon = "SELECT post_title FROM {$wpdb->posts} WHERE post_title='special50' AND post_type ='shop_coupon' AND post_status ='publish'";
            if(in_array($coupon_id, $woocommerce->cart->applied_coupons)){
                $cost = 25; 
            }
            $new_rate['cost']  = $cost;
            $method->add_rate( $new_rate );
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   LoicTheAztec    6 年前

    这可以使用以下连接的自定义函数来完成 woocommerce_package_rates 过滤钩,无需创建额外的折扣固定利率。当应用“Special50”优惠券时,以下代码将更改“统一费率”运输方法成本。

    你应该先 “启用调试模式” 在Woocomerce设置中>配送>配送选项。

    代码:

    add_filter('woocommerce_package_rates', 'coupon_discount_on_flat_rate', 10, 2);
    function coupon_discount_on_flat_rate( $rates, $package ){
        if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 
            return $rates;
    
        // Checking for 'special50' in applied coupons
        if( in_array( 'special50', WC()->cart->get_applied_coupons() ) ){
            foreach ( $rates as $rate_key => $rate ){
                $has_taxes = false;
                // Targeting "flat rate" shipping method
                if( $rate->method_id === 'flat_rate' ){
                    // Set 50% of the cost
                    $rates[$rate_key]->cost = $rates[$rate_key]->cost / 2;
    
                    // Taxes rate cost (if enabled)
                    foreach ($rates[$rate_key]->taxes as $key => $tax){
                        if( $rates[$rate_key]->taxes[$key] > 0 ){
                            $has_taxes = true;
                            // set 50% of the cost
                            $taxes[$key] = $rates[$rate_key]->taxes[$key] / 2;
                        }
                    }
                    if( $has_taxes )
                        $rates[$rate_key]->taxes = $taxes;
                }
            }
        }
        return $rates;
    }
    

    代码放在活动子主题(或活动主题)的function.php文件中。测试和工作。

    别忘了禁用 “启用调试模式” 一旦测试成功。