Установите нулевую стоимость всех способов доставки на основе промежуточного итога корзины в WooCommerce.

У меня есть несколько способов доставки на моей странице, и я хочу, чтобы они стоили ноль, когда заказ превышает 2500 чешских крон. Я обнаружил, что код показывает только вариант бесплатной доставки, когда клиент достигает минимума для бесплатной доставки, но это не то, что я хочу .. Я хочу показать все методы (но с нулевой ценой), чтобы клиент мог выбрать, какую доставку компания, с которой он хочет, чтобы его заказ был доставлен. Спасибо!


person Tereza Sadílková    schedule 10.02.2021    source источник
comment
Обратите внимание, что в StackOverFlow мы ожидали, что вы сначала выполните поиск, попробуете себя и предоставите в своем вопросе собственную реальную попытку кода. Я ответил на ваш вопрос исключительно, поскольку мне пришлось внести небольшие изменения в существующий код ответа.   -  person LoicTheAztec    schedule 10.02.2021


Ответы (1)


На основании Задайте общую сумму доставки корзины после Woocommerce обновить код ответа, вот способ заставить его работать в зависимости от итоговой суммы определенных товаров в корзине:

add_filter('woocommerce_package_rates', 'null_shipping_costs_conditionally', 10, 2 );
function null_shipping_costs_conditionally( $rates, $package ){
    $threshold_amount = 2500;
    
    if( $package['contents_cost'] >= $threshold_amount ) {
        // Loop through shipping methods rates
        foreach ( $rates as $rate_key => $rate ){
            // Targeting all shipping methods except "Free shipping"
            if ( 'free_shipping' !== $rate->method_id ) {
                $has_taxes = false;
                $taxes = [];
    
                $rates[$rate_key]->cost = 0; // Set cost to 0 (zero)
                // Taxes rate cost (if enabled)
                foreach ($rates[$rate_key]->taxes as $key => $tax){
                    if( $tax > 0 ){
                        $has_taxes = true;
                        $taxes[$key] = 0; // Set tax cost to 0 (zero)
                    }
                }
                if( $has_taxes )
                    $rates[$rate_key]->taxes = $taxes;
            }
        }
    }
    return $rates;
}

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

Примечание. Сохранив этот код, не забудьте очистить корзину, чтобы обновить кэшированные данные о доставке.

person LoicTheAztec    schedule 10.02.2021
comment
Спасибо большое!! И последнее: что, если я хочу добавить текст рядом с методами доставки, в котором написано «бесплатно»? Теперь удаляет только цену. Спасибо !! - person Tereza Sadílková; 11.02.2021
comment
Сначала Если мой ответ отвечает на ваш первоначальный вопрос, вы можете принять ответ, спасибо. Итак, после строки с: $rates[$rate_key]->cost = 0; добавьте новую строку ниже с $rates[$rate_key]->label = __("Here your text", "woocommerce");, где вы замените Here your text текстом, который вы хотите отобразить. - person LoicTheAztec; 11.02.2021
comment
Я принял ответ, спасибо. Когда я попытался вставить код, оба метода доставки изменились на введенный мной текст. Я хотел поместить свой текст рядом со способами доставки - например. FedEx (бесплатно), а не только бесплатно. - person Tereza Sadílková; 12.02.2021
comment
@ TerezaSadílková В этом комментарии невозможно ответить или понять. Зона… Правило на StackOverFlow - это только один вопрос. Пожалуйста, сначала поищите, попробуйте сами, если что-то найдете или зададите новый вопрос. - person LoicTheAztec; 12.02.2021
comment
Она имеет в виду следующее; она попросила дополнительную помощь с добавлением текста после транспортной этикетки, и предоставленный вами ответ полностью заменяет этикетку, в результате чего все варианты доставки называются Здесь ваш текст - что далеко не обязательно. - person ; 13.02.2021