|
|
|
@ -403,3 +403,46 @@ function map_attr_slugs_to_class($slug) { |
|
|
|
|
return $slug_map[$slug] ?? $slug; // Fallback to original slug if not found |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Изменение цены доставки на разбиение НДС + основная стоимость |
|
|
|
|
add_filter( 'woocommerce_package_rates', function( $rates, $package ) { |
|
|
|
|
|
|
|
|
|
foreach ( $rates as $rate_id => $rate ) { |
|
|
|
|
|
|
|
|
|
// Цена от плагина (итоговая с налогом) |
|
|
|
|
$final_shipping_with_tax = $rate->cost; |
|
|
|
|
|
|
|
|
|
// Получаем налоговую ставку для этого метода |
|
|
|
|
$tax_rates = WC_Tax::get_rates( $rate->tax_class ); |
|
|
|
|
if ( empty( $tax_rates ) ) { |
|
|
|
|
continue; // если нет налога |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Берём первую найденную ставку |
|
|
|
|
$tax_rate_key = key( $tax_rates ); |
|
|
|
|
$tax_rate_data = reset( $tax_rates ); |
|
|
|
|
$tax_percent = floatval( $tax_rate_data['rate'] ); |
|
|
|
|
|
|
|
|
|
// Считаем коэффициент |
|
|
|
|
$coef = 1 / ( 1 + $tax_percent / 100 ); |
|
|
|
|
|
|
|
|
|
// Цена без налога |
|
|
|
|
$base_shipping = round( $final_shipping_with_tax * $coef, wc_get_price_decimals() ); |
|
|
|
|
|
|
|
|
|
// Налог как разница |
|
|
|
|
$tax_amount = round( $final_shipping_with_tax - $base_shipping, wc_get_price_decimals() ); |
|
|
|
|
|
|
|
|
|
// Устанавливаем |
|
|
|
|
$rate->cost = $base_shipping; |
|
|
|
|
|
|
|
|
|
// Заполняем налоги корректно для WooCommerce |
|
|
|
|
$taxes_array = array_fill_keys( array_keys( WC_Tax::get_rates( $rate->tax_class ) ), 0 ); |
|
|
|
|
$taxes_array[$tax_rate_key] = $tax_amount; |
|
|
|
|
|
|
|
|
|
$rate->taxes = $taxes_array; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $rates; |
|
|
|
|
|
|
|
|
|
}, 100, 2 ); |
|
|
|
|