Аргумент $price
в этом хуке представляет собой отформатированную цену товара , тогда вам нужно исходная цена , чтобы она работала в ваших пользовательских вычислениях. Вместо этого попробуйте следующее:
add_filter( 'woocommerce_cart_item_price', 'change_cart_item_price', 10, 3 );
function change_cart_item_price( $price, $cart_item, $cart_item_key ){
if ( WC()->cart->display_prices_including_tax() ) {
$product_price = wc_get_price_including_tax( $cart_item['data'] );
} else {
$product_price = wc_get_price_excluding_tax( $cart_item['data'] );
}
if ( isset($cart_item['length']) ) {
$price = wc_price( $product_price * $cart_item['length'] );
}
return $price;
}
Это должно работать.