【问题标题】:Disable Free Shipping based on shipping classes in Woocommerce根据 Woocommerce 中的运输类别禁用免费送货
【发布时间】:2018-08-23 08:27:34
【问题描述】:

我正在尝试为 WooCommerce 编写一个函数,如果购物车中存在具有特定运输类别的产品,它将禁用免费送货。

这是我所拥有的,但不起作用。 e-packet 是运输类,如果它存在于购物车中,则应禁用免费送货。

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 );

【问题讨论】:

    标签: php wordpress woocommerce cart shipping


    【解决方案1】:

    基于相似: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) 在配送设置中,输入配送区域并禁用配送方式并“保存”。然后重新启用运送方式并“保存”。 你已经完成了。

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 2021-10-28
      • 1970-01-01
      • 2019-05-31
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2021-07-05
      相关资源
      最近更新 更多