基于航运类车中的项目取消设置WooCommerce运输方式(Unsetting WooCommerc

2019-09-29 23:15发布

我想取消设置固定费率的运输方式只有当车中有既没有运输类产品。 如果在车中的所有产品具有运输类,那么就应该留下来。

有这样的运输方式:固定费率 - (flat_rate1)(INSTANCE_ID = 1)

而这些航运类:50,100等等,名为蛞蝓一样:50,100 ...

扁平率送货方式已设立这些航运类,主要成本并没有找到方法运输类费用没有设置成本,因此它只出现产品车有集海运类。

得到它的工作

add_filter( 'woocommerce_package_rates', 'unset_shipping_for_unmatched_items', 100, 2 );

function unset_shipping_for_unmatched_items( $rates, $package ) {
    // Initialisation
    $shipping_classes = array( 50, 100, 150, 200, 250, 300 );
    $cart_items = WC()->cart->get_cart();
    $cart_items_count = WC()->cart->get_cart_contents_count();

    $items_match = false;

    $inArray    = 0;
    $notInArray = 0;

    foreach( $cart_items as $cart_item ){
        if( in_array( $cart_item[ 'data' ]->get_shipping_class(), $shipping_classes ) && $cart_items_count > 1 ) {
            $inArray++;
        } else {
            $notInArray++;
        }
    }
    if( ( $cart_items_count == $notInArray ) || ( $cart_items_count == $inArray ) ){
        $items_match = false;
    } else {
        $items_match = true;
    }

    if( $items_match )
        unset( $rates['flat_rate:6'] );

    return $rates;
}

Answer 1:

在WooCommerce航运方法ID蛞蝓有一点不同,我的意思是有一个错字错误。 您将需要添加: :名称和段塞数量之间'flat_rate6'

此外,一旦你得到一个匹配的购物车中物品运输类,你可以break循环。
最后一件事:这个钩子有2个可用参数: $rates$package

所以,你的代码将是:

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
    $shipping_classes = array( 50, 100, 150, 200, 250, 300 );
    $class_exists = false;

    foreach( WC()->cart->get_cart() as $cart_item )
        if( in_array( $cart_item[ 'data' ]->get_shipping_class_id(), $shipping_classes ) ) {
            $class_exists = true;
            break; // Stop the loop
        }

    if( $class_exists ) 
        unset( $rates['flat_rate:6'] );

    return $rates;
}

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

这应该现在的工作。



文章来源: Unsetting WooCommerce shipping method based on cart items shipping classes