如果购物车商品使用特定的送货类ID

时间:2017-08-09 19:16:36

标签: php wordpress woocommerce cart shipping

如果购物车中有特定的货运类,我会尝试停用送货方式。我正在使用最新的woocommerce版本。

以下是我的任务代码。 它位于我主题的functions.php文件的末尾。

可悲的是它没有用。

add_filter( 'woocommerce_package_rates', 'businessbloomer_hide_free_shipping_for_shipping_class', 10, 2 );
function businessbloomer_hide_free_shipping_for_shipping_class( $rates, $package ) {
    $shipping_class_target = 513;           // ID OF MY SHIPPING_CLASS
    $in_cart = false;
    foreach( WC()->cart->cart_contents as $key => $values ) {
        if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
            $in_cart = true;
            break;
        } 
    }
    if( $in_cart ) {
        unset( $rates['flat_rate:2'] );     //VALUE:ID OF MY SHIPPING METHOD
    }
    return $rates;
}

1 个答案:

答案 0 :(得分:3)

我已经测试过简化你的代码(使用我的WC设置的ID)并且有效

add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_methods', 10, 2 );
function custom_hide_shipping_methods( $rates, $package ) {
    foreach( WC()->cart->get_cart() as $cart_item  ) {
        $product = $cart_item[ 'data' ]; // The WC_Product object
        if( $product->get_shipping_class_id() == 513 ) { // <== ID OF MY SHIPPING_CLASS
            unset( $rates['flat_rate:2'] ); // Removing specific shipping method
            break; // we stop the loop
        }
    }
    return $rates;
}

因此您的代码也应该正常工作 (如果您设置了正确的ID)

  

但是你需要(将你的代码保存到活动主题的function.php文件中)

     

1)删除测试时保留在购物车中的所有购物车商品

     

2)刷新送货缓存:
  要做到这一点,你可以进入一个运输区并禁用一个&#34;统一费率&#34; (例如)和&#34;保存&#34;。然后重新启用&#34;统一费率&#34;并且&#34;保存&#34;。你完成了。

现在您可以再次测试,它应该可以正常工作