首页 文章

Woocommerce如何根据总价格启用送货方式

提问于
浏览
2

我想根据这些条件更改允许的运输方式:

如果购物车小计小于300欧元,则允许的送货方式为本地送货 .

如果购物车小计在300和1000欧元之间,则允许的运输方式是固定费率 .

超过1000€免运费 .

可以在管理员设置中设置免费送货限额 . 但是无法设置休息 . 我试图在我的自定义cart-shiping.php WC模板中更改它 . 这条路:

if($woocommerce->cart->subtotal > 300 and $woocommerce->cart->subtotal < 1000)
    $chosen_method =  "flat_rate";    
foreach ( $available_methods as $method ) :
    global $woocommerce;
    $subtotal = $woocommerce->cart->subtotal;
    if((($subtotal > 300 and $subtotal  < 1000   or $method->method_id == "local_delivery")  and ($subtotal < 300  or $method->method_id == "flat_rate")) or ($subtotal > 1000 and $method->method_id == "free_shipping")){
    ?>
    <li>
        <input type="radio" name="shipping_method[<?php echo $index; ?>]" data-index="<?php echo $index; ?>" id="shipping_method_<?php echo $index; ?>_<?php echo sanitize_title( $method->id ); ?>" value="<?php echo esc_attr( $method->id ); ?>" <?php checked( $method->id, $chosen_method ); ?> class="shipping_method" />
        <label for="shipping_method_<?php echo $index; ?>_<?php echo sanitize_title( $method->id ); ?>"><?php echo wp_kses_post( wc_cart_totals_shipping_method_label( $method ) ); ?></label>
    </li>
 <?php 
 }
endforeach; ?>

这几乎是我所需要的,但总价格(购物车中所有商品的价格,包括运费价格)有时不适合,因为这个价格是在WC_Cart类中计算的,并且已经选择了shpping方法 . 有没有人知道解决这个问题或任何整个清洁方式的任何方法(除了this payd plugin)?

1 回答

  • 2

    这是您需要使用的代码段 . 使用 woocommerce_package_rates 过滤器挂钩,您可以有条件地设置或取消设置送货方式

    add_filter( 'woocommerce_package_rates', 'custom_package_rates', 10, 2 );
    function custom_package_rates( $rates, $package ) {
    
        $total = WC()->cart->cart_contents_total;
    
        if( 300 <= $total ) {
    
            unset( $rates['flat_rate'] );
            unset( $rates['free_shipping'] );
    
        } elseif ( 301 >= $total && 1000 <= $total ) {
    
            unset( $rates['local_delivery'] );
            unset( $rates['free_shipping'] );
    
        }
    
        // etc add the remaining condition
    
        return $rates;
    }
    

相关问题