在 WooCommerce 中禁用特定优惠券代码的免费送货

Disable free shipping for specific coupon codes in WooCommerce

我试图在有人使用特定优惠券代码时删除 Woocommerce 中的免费送货选项。我发现 这与我的问题非常相关。下面的答案似乎非常接近我正在寻找的东西。我是 php 的新手,正在尝试找出要在何处为要排除的优惠券代码添加 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;
});

这是我关于堆栈溢出的第一个问题,但是这个网站在很多问题上都帮了我很多。如果我要求太多,请原谅我。提前感谢任何 help/guidance.

改为使用 woocommerce_package_rates 过滤器挂钩。在下面的代码中,您将设置将隐藏免费送货方式的相关优惠券代码:

add_filter( 'woocommerce_package_rates', 'hide_free_shipping_method_based_on_coupons', 10, 2 );
function hide_free_shipping_method_based_on_coupons( $rates, $package )
{
    $coupon_codes       = array('summer'); // <== HERE set your coupon codes
    $applied_coupons    = WC()->cart->get_applied_coupons(); // Applied coupons
    
    if( empty($applied_coupons) )
        return $rates;

    // For specific applied coupon codes
    if( array_intersect($coupon_codes, $applied_coupons) ) {
        foreach ( $rates as $rate_key => $rate ) {
            // Targetting "Free shipping"
            if ( 'free_shipping' === $rate->method_id ) {
                unset($rates[$rate_key]); // hide free shipping method
            }
        }
    }
    return $rates;
}

代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

Clearing shipping caches:

  • You will need to empty your cart, to clear cached shipping data
  • Or In shipping settings, you can disable / save any shipping method, then enable back / save.