首页 文章

如何在woocommerce中添加自定义运费?

提问于
浏览
8

我想使用woocommerce中的代码添加运费 . 这是我的要求 .

如果我的运输国家是澳大利亚,则运费不同,澳大利亚境外也不同 . 现在,如果我的运输国家是澳大利亚和

1. if order value is < 100, then shipping charge is $100 
2. if order value is > 100, then shipping charge is $0.

如果我的运输国家在澳大利亚境外

1. if order value is < 500, then shipping charge is $60
 2. if order value is > 500 and < 1000, then shipping charge is $50
 3. if order value is > 1000, then shipping charge is $0

那么,当用户从结帐页面更改送货国家时,如何根据我的上述要求添加自定义运费 . 我尝试下面的代码,但它只适用于订单 Value ,如何在自定义插件中的下面的代码中添加运输国家/地区 .

class WC_Your_Shipping_Method extends WC_Shipping_Method {
    public function calculate_shipping( $package ) {
    global $woocommerce;
        if($woocommerce->cart->subtotal > 5000) {
            $cost = 30; 
        }else{
            $cost = 3000;
      }
}
$rate = array(
    'id' => $this->id,
    'label' => $this->title,
    'cost' => $cost,
    'calc_tax' => 'per_order'
);

// Register the rate
$this->add_rate( $rate );

}

2 回答

  • 7

    最好为可以使用钩子的运费制作自定义插件 .
    首先在自定义插件中扩展'WC_Your_Shipping_Method'类,并使函数如下:

    public function calculate_shipping( $package ) {
        session_start();
        global $woocommerce;
    
        $carttotal = $woocommerce->cart->subtotal;
        $country = $_POST['s_country']; //$package['destination']['country'];
    
        if($country == 'AU')
        {
            if($carttotal > 100){
                $cost = 5;
            }else{
                $cost = 10;//10.00;
            }
        }
        else
        {
            if($carttotal < 500){
                $cost = 60;//60.00;
            }else if($carttotal >= 500 && $carttotal <= 1000){
                $cost = 50;//50.00;
            }else if($carttotal > 1000){
                $cost = 0;
            }
        }
    
        $rate = array(
            'id' => $this->id,
            'label' => 'Shipping',
            'cost' => $cost,
            'calc_tax' => 'per_order'
        );
    
        // Register the rate
        $this->add_rate( $rate );
    }
    
  • 0

    首先将管理员名称中的送货方式设为'myship'

    然后在主题functions.php文件中添加以下代码

    add_action('woocommerce_before_cart_table', 'discount_when_produts_in_cart');
    
    function discount_when_produts_in_cart( ) {
    
        global $woocommerce;
    
     $coupon_code = 'myship';
    
        if( $woocommerce->cart->get_cart_total() > 500 ) {
    
            $coupon_code = 'myship';
    
       }
    
     else
    
     {
    
       $woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code));
    
        $woocommerce->clear_messages();
    
     }
    

相关问题