add_action( 'woocommerce_order_before_calculate_totals', "custom_order_before_calculate_totals", 10, 3);
function custom_order_before_calculate_totals($and_taxes, $order ) {
$total_deposit = 0;
foreach( $order->get_items() as $item_id => $item ) {
$product = $item->get_product();
$product_quantity = $item->get_quantity();
$deposit = $product->get_attribute('deposit') * $product_quantity;
$total_deposit += $deposit;
}
$deposit_fee_exists = false;
foreach( $order->get_fees() as $item_id => $item_fee ) {
$fee_name = $item_fee->get_name();
if ( $fee_name == 'Deposit' ) {
$item_fee->set_tax_status('none');
$item_fee->set_total($total_deposit);
$deposit_fee_exists = true;
break;
}
}
if ( $total_deposit > 0 && !$deposit_fee_exists ) {
$item_fee = new WC_Order_Item_Fee();
$item_fee->set_name( "Deposit" );
$item_fee->set_amount( $total_deposit );
$item_fee->set_tax_status( 'none' );
$item_fee->set_total( $total_deposit );
$order->add_item( $item_fee );
}
}