WooCommerce бесплатная доставка для участников приводит к ошибке - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть проблема, когда я хочу, чтобы участники получали бесплатную доставку.Я понял, как это сделать, но теперь я получаю сообщение об ошибке на странице.

Ошибка:

The WC_Cart->taxes function is deprecated since version 3.2. Replace 
with getters (WC_Cart::get_cart_contents_taxes()) and setters 
(WC_Cart::set_cart_contents_taxes())., referer: 

Это код, который создает проблему:

add_filter('woocommerce_package_rates','test_overwrite_fedex', 100, 2);
  function test_overwrite_fedex($rates,$package) 
    {
      $memberships = wc_memberships_get_user_active_memberships();
      if (WC()->customer->get_shipping_country() === 'DK' && !empty($memberships))
        {
          foreach ($rates as $rate) 
            {
              //Set the TAX
              $rate->taxes[1] = 0;
            }
        }
        return $rates;
    }

Я пытался с:

$rate->set_shipping_total('0');
WC()->cart->set_shipping_total('0');
$rate = WC()->cart->get_shipping_total();

И все же не повезло.

1 Ответ

0 голосов
/ 21 сентября 2018

Налоги на тарифы на способы доставки устанавливаются в более сложном многомерном массиве, поэтому ваш код допускает ошибку.Также вы просто забыли обнулить стоимость тарифа.

Вам может потребоваться " Включить режим отладки " в общих настройках доставки на вкладке " Параметры доставки ", , чтобы отключить временные кэши доставки.

Попробуйте следующий код, который обнулит стоимость любого способа доставки для определенной страны (DK) и для активных участников:

add_filter('woocommerce_package_rates', 'conditionally_remove_shipping_rates_cost', 25, 2);
function conditionally_remove_shipping_rates_cost( $rates, $package ){

    $memberships = wc_memberships_get_user_active_memberships();

    if ( WC()->customer->get_shipping_country() === 'DK' && !empty($memberships) ) {

        // Loop through the shipping taxes array
        foreach ( $rates as $rate_key => $rate ){
            $has_taxes = false;

            // Not for free shipping
            if( 'free_shippping' !== $rate->method_id ){
                // Taxes rate cost (if enabled)
                $taxes = [];

                // Null the shippin cost
                $rates[$rate_key]->cost = 0;

                // Loop through the shipping taxes array (as they can be many)
                foreach ($rates[$rate_key]->taxes as $key => $tax){
                    if( $rates[$rate_key]->taxes[$key] > 0 ){
                        // Null tax cost
                        $taxes[$key] = 0;
                        $has_taxes   = true;
                    }
                }
                if( $has_taxes )
                    $rates[$rate_key]->taxes = $taxes;
            }
        }
    }
    return $rates;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает (без функции членства) .

Не забудьте включить кэш обратной доставки.

...