根据Woocommerce中的运送类禁用免费送货

时间:2018-03-14 17:18:55

标签: php wordpress woocommerce cart shipping

我试图为WooCommerce编写一个功能,如果购物车中有特定装运等级的产品,将禁用免费送货。

这是我的工作不起作用。如果购物车中有电子包,则应禁用免运费。

function hide_shipping_when_class_is_in_cart( $rates, $package ) {

    $shipping_classes = array('e-packet');
    $if_exists = false;

    foreach( $package['contents'] as $key => $values ) {
        if( in_array( $values[ 'data' ]->get_shipping_class(), $shipping_classes )   )
            $if_exists = true;
    }

    if( $if_exists ) unset( $rates['free_shipping:9'] );

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_class_is_in_cart', 10, 2 );

1 个答案:

答案 0 :(得分:0)

基于类似:Unsetting WooCommerce shipping method based on cart items shipping classes

我做了很小的改动。此代码经过测试并正常工作(请参阅最后的说明)

add_filter( 'woocommerce_package_rates', 'hide_shipping_when_class_is_in_cart', 100, 2 );
function hide_shipping_when_class_is_in_cart( $rates, $package ) {
    // Initialisation 
    $free_shipping_method = 'free_shipping:9';
    $shipping_classes = array('e-packet');
    $class_exists = false;

    foreach( $package['contents'] as $cart_item )
        if( in_array( $cart_item['data']->get_shipping_class(),  $shipping_classes ) ) {
            $class_exists = true;
            break; // Stop the loop
        }

    if( $class_exists )
        unset( $rates[$free_shipping_method] );

    return $rates;
}

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

  

您需要刷新送货缓存:
  1)首先,此代码已保存在function.php文件中。
  2)在运输设置中,输入运输区域并禁用运输方式和“保存”。然后重新启用送货方式和“保存”。 你已经完成了。