首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用基于Woocommerce中船运类的免费航运

禁用基于Woocommerce中船运类的免费航运
EN

Stack Overflow用户
提问于 2018-03-14 17:18:55
回答 1查看 1.3K关注 0票数 1

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

以下是我所拥有的不起作用的东西。E-包是运输类,如果它存在于购物车中,应该禁用免费传送。

代码语言:javascript
复制
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 );
EN

回答 1

Stack Overflow用户

发布于 2018-03-14 18:04:19

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

我做了很小的改变。这段代码是经过测试和工作的(见最后的注释)

代码语言:javascript
复制
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)在“传送”设置中,输入“传送区域”并禁用传送方法和“保存”。然后重新启用传送方法和“保存”。你完了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49284009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档