应用优惠券禁用Woocommerce中的有条件免费送货

我试图得到它,以便如果客户要添加优惠券代码(其中任何一个),免费送货选项将消失,并将实施统一费率 . - 您会认为这将是一件容易实现的事情,会有100个插件和描述的方法来做到这一点,但我没有找到任何 . 我不想为插件支付89美元来做这件事

如果他们使用优惠券但是花费超过249美元他们仍然有资格获得免费送货,那么额外奖金将是 . 我读了一些如何做到这一点,但它需要我获取POST ID,这与最新的WooCommerce不可能像之前一样,我不知道发货ID所以我在丢失这里是代码

add_filter( 'woocommerce_shipping_packages', function( $packages ) {
$applied_coupons = WC()->session->get( 'applied_coupons', array() );
if ( ! empty( $applied_coupons ) ) {
$free_shipping_id = 'free_shipping:2';
unset($packages[0]['rates'][ $free_shipping_id ]);
}
return $packages;
} );

谢谢

编辑

add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 
10, 2 );
function coupons_removes_free_shipping( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return $rates;

$min_total      = 250; // Minimal subtotal allowing free shipping

// Get needed cart totals
$total_excl_tax = WC()->cart->get_total();
$discount_excl_tax = WC()->cart->get_discount_total();


// Calculating the discounted subtotal including taxes
$discounted_subtotal_incl_taxes = $total_excl_tax - $discount_excl_tax;

$applied_coupons   = WC()->cart->get_applied_coupons();

if( sizeof($applied_coupons) > 0 &&  $discounted_subtotal_incl_taxes < $min_total ) {
    foreach ( $rates as $rate_key => $rate ){
        // Targeting "Free shipping"
        if( 'free_shipping' === $rate->method_id  ){
            unset($rates[$rate_key]);
        }
    }
}
return $rates;

}

回答(2)

2 years ago

如果购物车小计达到最低金额(折扣包括税金),则以下代码将启用"Free shipping"申请优惠券:

add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 10, 2 );
function coupons_removes_free_shipping( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    $min_subtotal      = 250; // Minimal subtotal allowing free shipping

    // Get needed cart subtotals
    $subtotal_excl_tax = WC()->cart->get_subtotal();
    $subtotal_incl_tax = $subtotal_excl_tax + WC()->cart->get_subtotal_tax();
    $discount_excl_tax = WC()->cart->get_discount_total();
    $discount_incl_tax = $discount_total + WC()->cart->get_discount_tax();

    // Calculating the discounted subtotal including taxes
    $discounted_subtotal_incl_taxes = $subtotal_incl_tax - $discount_incl_tax;

    $applied_coupons   = WC()->cart->get_applied_coupons();

    if( sizeof($applied_coupons) > 0 && $discounted_subtotal_incl_taxes < $min_subtotal ){
        foreach ( $rates as $rate_key => $rate ){
            // Targeting "Free shipping"
            if( 'free_shipping' === $rate->method_id  ){
                unset($rates[$rate_key]);
            }
        }
    }
    return $rates;
}

代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 .


Original answer:

如果在没有任何设置需要的情况下应用任何优惠券,波纹管代码将删除“免运费”运送方式 . 您的实际代码中存在一些错误 . 请尝试以下方法:

add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 10, 2 );
function coupons_removes_free_shipping( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    $applied_coupons = WC()->cart->get_applied_coupons();

    if( sizeof($applied_coupons) > 0 ){
        // Loop through shipping rates
        foreach ( $rates as $rate_key => $rate ){
            // Targeting "Free shipping" only
            if( 'free_shipping' === $rate->method_id  ){
                unset($rates[$rate_key]); // Removing current method
            }
        }
    }
    return $rates;
}

代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 .

2 years ago

默认情况下,如果优惠券代码在购物车中填写并激活,WooCommerce仍将允许选择免费送货方式 . 如果使用优惠券代码,可以将以下代码添加到您孩子的functions.php页面以挂钩并隐藏任何免费送货选项 .

add_filter( 'woocommerce_shipping_packages', function( $packages ) {
$applied_coupons = WC()->session->get( 'applied_coupons', array() );
if ( ! empty( $applied_coupons ) ) {
$free_shipping_id = 'free_shipping:2';
unset($packages[0]['rates'][ $free_shipping_id ]);
}
return $packages;
} );

只需将上述代码中的$ free_shipping_id更改为您的免费送货选项的ID即可 . 您可以通过访问WooCommerce>设置>运输选项找到您的ID,然后单击您的免费送货选项 . 帖子ID将显示在显示免费送货详细信息/设置的页面的URL中 .

i.e www.yourdomain.com/wp-admin/post.php?post=40107&action=edit

其中40107是此示例中的运输ID . 您的送货ID将有所不同 .