Прогрессивная фиксированная ставка на основе промежуточного процента корзины в WooCommerce

В WooCommerce я пытаюсь установить прогрессивную стоимость доставки на основе 10% промежуточной суммы корзины с минимальной стоимостью 5 долларов США и максимальной стоимостью до 11 долларов США.

Вот моя попытка кода:

add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates', 10, 2 );
function woocommerce_package_rates( $rates, $package ) {
    // Make sure flat rate is available
    if ( isset( $rates['flat_rate:24'] ) ) {
        // Set the cost to $5
        $rates['flat_rate:24']->cost = 5;
    }
    $cart_subtotal = $WC()->cart->subtotal
    if ($cart_subtotal >50)

    $percentage = 0.10;  // Percentage (10%) in float
    $percentage_fee = ( WC()->cart->subtotal >+ WC()->cart->get_shipping_total()) * $percentage;
    }
 
    });
    return $rates;
}

Этот код выдает критическую ошибку на сайте. Я новичок в пользовательском кодировании Wordpress, как вы, вероятно, узнаете из кода ниже.

Также я хотел бы, чтобы отображаемый ярлык отображал USPS вместо фиксированной ставки.

Например, если промежуточная сумма корзины составляет 60 долларов, с них будет взиматься фиксированная стоимость доставки в размере 6 долларов (10% от промежуточной суммы).

Что я упускаю или делаю не так?


person Brenda Deming    schedule 12.08.2020    source источник


Ответы (1)


В предоставленном вами коде много ошибок ... Следующее позволит вам установить стоимость доставки от 5$ до 11$ макс, на основе промежуточного процента корзины.

Сначала вам нужно установить стоимость 5 (а также ИБП в качестве метки) в настройках единой ставки.

введите описание изображения здесь

Затем используйте этот код:

add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates', 10, 2 );
function woocommerce_package_rates( $rates, $package ) {
    $max_cost   = 11; // Here set the max cost for the shipping method
    $percentage = 10; // Percentage to apply on cart subtotal
    $subtotal   = WC()->cart->get_subtotal(); // Cart subtotal without taxes

    // Loop through shipping rates
    foreach ( $rates as $rate_key => $rate ) {
        // Targetting specific flate rate shipping method
        if ( 'flat_rate:14' === $rate_key ) {
            $has_taxes = false;
            $base_cost = $rate->cost; // 5$ from this shipping method cost setting
            $new_cost  = $subtotal * $percentage / 100; // Calculation

            if( $new_cost > $base_cost ) {
                // 1. Rate cost
                if ( $new_cost < $max_cost ) {
                    $rates[$rate_key]->cost = $new_cost;
                    $rate_operand = $new_cost / $base_cost; // (for taxes if enabled)
                } else {
                    $rates[$rate_key]->cost = $max_cost;
                    $rate_operand = $max_cost / $base_cost; // (for taxes if enabled)
                }
                // 2. Taxes rate cost (if enabled)
                foreach ($rates[$rate_key]->taxes as $key => $tax){
                    if( $tax > 0 ){
                        // New tax calculated cost
                        $taxes[$key] = $tax * $rate_operand;
                        $has_taxes = true;
                    }
                }
                // Set new taxes cost
                if( $has_taxes ) {
                    $rates[$rate_key]->taxes = $taxes;
                }
            }
        }
    }
    return $rates;
}

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Обновите кеши доставки:

  1. Этот код уже сохранен в вашем файле functions.php.
  2. В настройках зоны доставки отключите / сохраните любой способ доставки, затем включите возврат / сохранение.

    Готово, и вы можете проверить это.
person LoicTheAztec    schedule 12.08.2020