php 应用优惠券禁用免费送货有条件在Woocommerce

cdmah0mi  于 2022-11-21  发布在  PHP
关注(0)|答案(2)|浏览(135)

我试图让它,如果一个客户要添加一个优惠券代码(其中任何一个)的免费送货选项将消失和统一费率将被实施. -你会认为这将是一个容易的事情来实现,将有100的插件和方法描述来做到这一点,但我还没有找到任何.我不想支付$89插件做这一件事
一方奖金将是如果他们使用优惠券,但花费超过$249,他们仍然有资格免费送货。我读了一些在哪里如何做到这一点,但它需要我得到的职位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;

}

j2qf4p5b

j2qf4p5b1#

下面的代码将启用“免费送货”适用优惠券只有当购物车小计达到最低金额 (折扣含税)

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文件。测试和工作。

原始答案:

下面的代码将删除“免费送货”送货方式时,任何优惠券是应用没有任何设置需要.有一些错误,在你的实际代码.尝试以下:

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文件中。

vtwuwzda

vtwuwzda2#

默认情况下,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可能会有所不同。

相关问题