Если я правильно понял, попробуйте следующее, где вы получите самую высокую цену товара в корзине и будет применена соответствующая комиссия:
public function add_cart_versicherung_fee() {
session_start();
if ( isset( $_SESSION['versicherung_one'] ) ) {
$fee_rates = [
'ja-mit-sb' => [
14 => [0, 300],
18 => [300, 400],
22 => [400, 500],
28 => [500, 600],
34 => [600, 800],
39 => [800, 1000],
],
'ja-ohne-sb' => [
26 => [0, 300],
29 => [300, 400],
36 => [400, 500],
39 => [500, 600],
44 => [600, 800],
49 => [800, 1000],
],
'ja-mit-sb-jahr' => [
29 => [0, 750],
34 => [750, 1000],
],
'ja-ohne-sb-jahr' => [
49 => [0, 750],
59 => [750, 1000],
],
'nein' => 0,
];
$texts = [
'ja-ohne-sb' => 'Versicherung (ohne Selbstbeteiligung)',
'ja-ohne-sb-jahr' => 'Jahresversicherung (ohne Selbstbeteiligung)',
'ja-mit-sb' => 'Versicherung (mit Selbstbeteiligung)',
'ja-mit-sb-jahr' => 'Jahresversicherung (mit Selbstbeteiligung)',
'nein' => 'Keine Versicherung',
];
$product_prices = [];
$fee = 0;
// Loop Through cart items - Collect product prices
foreach ( WC()->cart->get_cart() as $cart_item ) {
$product_prices[] = $cart_item['data']->get_price();
}
// Sorting prices DESC and keep highest price
rsort($product_prices); // Sorting prices (Desc)
$highest_price = reset($product_prices);
// Loop through versicherung session array
foreach ( $_SESSION['versicherung_one'] as $value ) {
if ( isset( $fee_rates[$value]) ) {
// Loop through fee rates multi array to get the fee
foreach ( $fee_rates[$value] as $rate => $range ) {
if( $value == 'nein' ) break;
if ( $highest_price > $range[0] && $highest_price <= $range[1]) {
$fee = $rate;
break;
}
}
WC()->cart->add_fee( '1. Teilnehmer: '.$texts[$value], $fee );
break;
}
}
}
}
При необходимости, для цены продукта, включая или исключая налоги, вы можете заменить эту строку:
$product_prices[] = $cart_item['data']->get_price();
1) цена товара с учетом налогов:
$product_prices[] = wc_get_price_including_tax( $cart_item['data'] );
2) цена товара без учета налогов:
$product_prices[] = wc_get_price_excluding_tax( $cart_item['data'] );