Как добавить удаленный метод доставки или переопределить его настройки метода для определенных условий в Woocommerce? - PullRequest
0 голосов
/ 24 октября 2019

Я исключаю виртуальные продукты из бесплатной доставки, с рабочим кодом ниже. Однако тарифы «Flexible_shipping_12_1» и «_12_2» являются проблематичными, поскольку они удаляются при превышении порога бесплатной доставки.

Например, пользователь покупает виртуальный продукт стоимостью 20 долларов США и другие продукты стоимостью 26 долларов США, что составляет порядка 46 долларов США, что дает им право на бесплатную доставку. Поскольку они имеют право на бесплатную доставку, остальные тарифы отменяются.

Приведенный ниже код проверяет, что фактически не виртуальная сумма составляет всего $ 26, поэтому они не должны получать бесплатную доставку. Они имеют право на ставку $ 26- $ 44,99. Эта часть работает.

Если бесплатная доставка будет удалена, они должны получить следующий уровень доставки: ID = Flexible_shipping_12_2. Этот метод удалил себя, потому что он думает, что общая сумма заказа составляет 46 $.

Мне нужно «вставить», а не создавать этот метод и # _12_1 в доступные методы доставки в местах, указанных в коде ниже.

Не могу понять, как заново вставить способ доставки:

//Exclude virtual products from free shipping

add_filter('woocommerce_package_rates', 'custom_shipping_option', 20, 2 );

function custom_shipping_option($rates, $package){

  $non_virtual_total = 0;

  // Get the cart content total excluding virtual products

  foreach( WC()->cart->get_cart() as $cart_item )

    if( ! $cart_item['data']->is_virtual( ) ){
        $non_virtual_total += $cart_item['line_total'];
    }

  // Disabling methods based on non_virtual_total

 if( $non_virtual_total <  45 && $non_virtual_total >= 25 ){

  foreach ( $rates as $rate_key => $rate )

  if( 'free_shipping' == $rate->method_id )
  unset( $rates[ $rate_key ] );

  if( 'flexible_shipping_12_1' == $rate->method_id )
  unset( $rates[ $rate_key ] );

  //insert flexible_shipping_12_2 method here

        }


    if( $non_virtual_total <  25 ){

    foreach ( $rates as $rate_key => $rate )
    if( 'free_shipping' == $rate->method_id )
      unset( $rates[ $rate_key ] );

    if( 'flexible_shipping_12_2' == $rate->method_id )
      unset( $rates[ $rate_key ] );

    //insert flexible_shipping_12_1 method here 


        }       

return $rates;

}

1 Ответ

0 голосов
/ 24 октября 2019

Я полагаю, вы просто хотите повторно добавить flexible_shipping_12_1 или flexible_shipping_12_2 способ доставки в массив $rates, верно?

Это должно быть все, что вам нужно:

//insert flexible_shipping_12_1 method here
array_push($rates, "flexible_shipping_12_1");

//insert flexible_shipping_12_2 method here
array_push($rates, "flexible_shipping_12_2");

Метод array_push просто добавляет новое значение в массив.

...