Обновление (только настройки)
Чтобы добавить скидку только для "большого" класса доставки по методу "Единый тариф", вам потребуется:
- Установите цену со скидкой непосредственно на стоимость способа доставки.
- Возможность расчета "Для класса: платная доставка для каждого класса доставки отдельно"
Как:
Оригинальный ответ:
Следующий кодустановит стоимость доставки в размере 50% для метода доставки с фиксированной ставкой, если в корзине найден определенный определенный способ доставки.
Тестирование: Временное "Включите режим отладки"в настройках доставки в разделе" Параметры доставки "* вкладка 1036 * ...
Настройки доставки" Единый тариф ": Стоимость классов доставки должнабыть определенным.
В приведенном ниже коде определите в каждой функции свой слаг класса доставки и свое специальное уведомление:
add_filter('woocommerce_package_rates', 'shipping_costs_discounted_based_on_shipping_class', 10, 2);
function shipping_costs_discounted_based_on_shipping_class( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
// Your settings bellow
$shipping_class = 'large'; // <=== Shipping class slug
$percentage = 50; // <=== Discount percentage
$discount_rate = $percentage / 100;
$is_found = false;
// Loop through cart items and checking for the specific defined shipping class
foreach( $package['contents'] as $cart_item ) {
if( $cart_item['data']->get_shipping_class() == $shipping_class )
$is_found = true;
}
// Set shipping costs to 50% if shipping class is found
if( $is_found ){
foreach ( $rates as $rate_key => $rate ){
$has_taxes = false;
// Targeting "flat rate"
if( 'flat_rate' === $rate->method_id ){
$rates[$rate_key]->cost = $rate->cost * $discount_rate;
// Taxes rate cost (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
$has_taxes = true;
$taxes[$key] = $tax * $discount_rate;
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
}
return $rates;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.
Не забудьте отключить «режим отладки» в настройках доставки после того, как это было проверено один раз.