仅当特定产品是购物车中的唯一商品时,我可以禁用送货方式吗?

问题描述 投票:0回答:1

我想看看当购物车中有特定运输类别的产品时是否可以禁用所有/特定运输选项。但是,此规则仅适用于特定产品是购物车中的唯一商品时。如果存在任何其他产品,则会显示默认的运输选项。这是我以前用过的

add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_for_shipping_class', 9999, 2 );
   
function custom_hide_shipping_for_shipping_class( $rates, $package ) {
   $shipping_class_target = 569; // shipping class ID
   $in_cart = false;
   foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
      if ( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
         $in_cart = true;
         break;
      } 
   }
   if ( $in_cart ) {
      unset( $rates['free_shipping:8'] ); // shipping method with ID
   }
   return $rates;
}

但是,尽管购物车中有其他产品,上述代码仍然有效。我只希望当特定产品是购物车中的唯一商品时才可以使用此功能。

上面的代码可以调整还是需要不同的方法?

任何帮助/建议将不胜感激。

php wordpress woocommerce product shipping-method
1个回答
0
投票

要使其正常工作,仅当特定产品是购物车中的唯一商品时,请尝试以下操作:

add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_for_shipping_class', 900, 2 );
function custom_hide_shipping_for_shipping_class( $rates, $package ) {
    $targeted_shipping_class  = 569; // shipping class ID
    $targeted_shipping_method = 'free_shipping:8'; // shipping method rate ID

    $found = false;

    foreach ( $package['contents'] as $item ) {
        if ( $item['data']->get_shipping_class_id() == $targeted_shipping_class ) {
            $found = true;
        } else {
            return $rates;
        }
    }
    if ( $found && isset($rates[$targeted_shipping_method]) ) {
        unset($rates[$targeted_shipping_method]);
    }
    return $rates;
}

应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.