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

时间:2015-10-08 11:36:10

标签: wordpress woocommerce

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

如果购物车小计小于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 个答案:

答案 0 :(得分:3)

这是您需要使用的代码段。使用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;
}