Добавление дополнительных затрат к фиксированной ставке woocommerce в зависимости от зоны доставки

Я нашел решение для подсчета фиксированной ставки на основе определенных шагов количества в woocommerce, и мне нужно дополнительно добавить дополнительную конкретную сумму в зависимости от зоны доставки. Например: я взимал с клиента 4 доллара за каждые 3 товара в зависимости от конкретного класса доставки, поэтому, если клиент добавил в корзину 6 товаров с одним и тем же классом доставки, он будет взимать 8 долларов, что мне нужно, чтобы добавить дополнительно 50 долларов в зависимости от класса доставки. зона доставки клиента, поэтому общая стоимость доставки составит 58 долларов (8 за номер товара + 50 за зону доставки), также я хочу иметь возможность добавлять в код множество классов доставки и множество зон доставки.

Вот код:

add_filter( 'woocommerce_package_rates', 'progressive_shipping_cost_based_shipping_class_quantity_steps', 10, 2 );
function progressive_shipping_cost_based_shipping_class_quantity_steps( $rates, $package )
{
    // HERE Bellow your settings
    $shipping_class = "very-light-weight"; // The shipping class ID
    $qty_step       = 20; // Items qty threshold for a step
    $item_count     = 0; // Initializing

    // Get the shipping class ID
    $class_id = get_term_by('slug', $shipping_class, 'product_shipping_class' )->term_id;


    // Loop through in cart items to get the Tshirts count
    foreach( $package['contents'] as $cart_item ) {
        if ( $cart_item['data']->get_shipping_class_id() == $class_id ){
            $item_count += $cart_item['quantity']; // Count Tshirts
        }
    }

    // The rate operand increase each {$qty_step} depending on {$item_count}
    $rate_operand = ceil( $item_count / $qty_step );

    foreach ( $rates as $rate_key => $rate ){
        // Targetting "Flat rate"
        if ( 'flat_rate' === $rate->method_id ) {
            $has_taxes = false;

            // Set the new cost
            $rates[$rate_key]->cost = $rate->cost * $rate_operand;

            // 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;
}

Я попробовал следующий код, чтобы добавить дополнительные 50 долларов к стоимости доставки, но он не работает:

// Add $50 shipping cost based on shipping zone
add_filter('woocommerce_package_rates', 'add_custom_shipping_rate', 10, 2);
function add_custom_shipping_rate($rates, $package) {
    $zone = WC_Shipping_Zones::get_zone_matching_package($package);
    $zone_name = $zone->get_zone_name();
    
    if ($zone_name === 'Your Shipping Zone Name') {
        foreach ($rates as $rate_key => $rate) {
            $rates[$rate_key]->cost += 50;
        }
    }
    
    return $rates;
}

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте следующий код, чтобы увеличить стоимость доставки в зависимости от зоны доставки. Вы можете добавить столько зон доставки и увеличить стоимость в данном коде.

function add_custom_shipping_rate( $rates, $package ) {
    // Shipping zone
    $shipping_zone = wc_get_shipping_zone( $package );
    
    // Get zone ID
    $zone_id = $shipping_zone->get_id();

    foreach( $rates as $rate_key => $rate ){
        if ($zone_id == 1){
            $rates[$rate_key]->cost = $rate->cost + 40;
        }
        else if ($zone_id == 2){
            $rates[$rate_key]->cost = $rate->cost + 50;
        }
        else{
            $rates[$rate_key]->cost = $rate->cost;
        }
    }

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'add_custom_shipping_rate', 10, 2 );

Код проверен и работает.

Большое спасибо, это работает очень хорошо, я просто хочу применить ту же условную концепцию к шагам количества, чтобы иметь возможность добавлять как можно больше классов доставки и шагов количества, например: if Shipping_class = "very-light-weight" qty_step = 20; если Shipping_class = «тяжелый» qty_step = 10;

Shehab Zahran 11.06.2024 14:49

Другие вопросы по теме