【问题标题】:Disable shipping method when a cart item has a specific shipping class?当购物车商品具有特定的运输类别时禁用运输方式?
【发布时间】:2018-01-17 19:57:02
【问题描述】:

如果购物车中有特定的配送类别,我会尝试禁用配送方式。我正在使用最新的 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;
}

【问题讨论】:

    标签: php wordpress woocommerce cart shipping


    【解决方案1】:

    我已经测试了简化你的代码(使用我的 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
            $shipping_class_id = $product->get_shipping_class_id();
    
            if( isset($rates['flat_rate:2']) && $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. 刷新运输缓存:
      为此,您可以进入发货区并禁用一个“统一费率”(例如) 和“保存”。然后重新启用“统一费率”和“保存”。你已经完成了。

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

    【讨论】:

    • 你太棒了!缓存刷新为我做到了!泰先生。
    • 晚会有点晚,只是快速提问var_dump($rates)/cart 页面上没有输出任何内容。这里是 wordpress 新手。
    • @SanjokGurung 由于这是一个过滤器,要了解运费数据,您最好尝试其他任何地方:echo '&lt;pre&gt;'; print_r(WC()-&gt;session-&gt;get('shipping_for_package_0')); echo '&lt;/pre&gt;';
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多