以编程方式删除特定的送货方式 - WooCommerce

时间:2017-06-26 13:46:04

标签: php wordpress woocommerce checkout cart

我需要在购物车重量超过150磅后,在购物车和结帐页面上删除我的UPS运输方式。这与我的想法一致......

function is_it_over_onefifty($available_methods){

        global $woocommerce;
        if ($woocommerce->cart->cart_contents_weight > 150){
            //diable shipping
            unset( $available_methods['ups'] );
        }
        else{

            //do nothing

        }
        return $available_methods;
}
add_filter( 'woocommerce_available_shipping_methods', 'is_it_over_onefifty', 10, 1);

1 个答案:

答案 0 :(得分:0)

我开始发表评论,但它变得太大了。

下面是一些实用的示例代码,可以帮助您到达所需的位置。请注意,这个想法来自这里:http://www.bolderelements.net/support/knowledgebase/hide-shipping-method-based-on-weight/

add_filter( 'woocommerce_package_rates', 'hide_shipping_weight_based', 10, 2 );

function hide_shipping_weight_based( $rates, $package ) {
    // if you don't know what the rates are, you can uncomment below to see all the rates that are available
    // var_dump( $rates );

    // Set weight variable
    $cart_weight = 0;

    // Shipping rate to be excluded
    $shipping_type = 'ups_';

    // Calculate cart's total
    foreach( WC()->cart->cart_contents as $key => $value) {
        $cart_weight += $value['data']->weight * $value['quantity'];
    }

    // only if the weight is over 150lbs find / remove specific carrier
    if( $cart_weight > 150 ) {
        // loop through all of the available rates
        foreach( $rates AS $id => $data ) ) {
            // if the rate id starts with "ups_", remove it
            if ( 0 === stripos( $id, $shipping_type ) {
                unset( $rates[ $id ] );
            }
        }
    }

    return $rates;
}