Как добавить плату за доставку в woocommerce?

Я хочу добавить стоимость доставки, используя код в woocommerce. вот мой reuirements.

Если моя страна доставки Австралия, то стоимость доставки отличается и за пределами Австралии также отличается. теперь, если моя страна доставки Австралия и

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

Если моя страна доставки за пределами Австралии и

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

Итак, как я могу добавить плату за доставку в соответствии с моими выше требованиями, когда пользователь меняет страну доставки со страницы оформления заказа. Я пробовал ниже кода, но он работает только на значении заказа, как я могу добавить страну доставки ниже кода в пользовательский плагин.

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 ответов


лучше сделать пользовательский плагин для оплаты доставки, где вы можете использовать крюк.
Сначала расширьте класс '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 );
}

сначала сделайте метод доставки в имени администратора как "myship"

затем добавьте ниже код в функции темы.файл 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();

 }