This can be done in woocommerce_checkout_create_order
action hook, where you will have to use CRUD getters and setters methods for WC_Abstract_Order
and WC_Order
classes...
As cart object and cart session has not been destroyed yet, you can still also use WC()->cart
object and WC_Cart
methods, to get data…
This hook is triggered just before the order data is saved in database with $order->save();
. You can see that in the source code HERE.
Below a fake working example:
add_action( 'woocommerce_checkout_create_order', 'change_total_on_checking', 20, 1 );
function change_total_on_checking( $order ) {
// Get order total
$total = $order->get_total();
## -- Make your checking and calculations -- ##
$new_total = $total * 1.12; // <== Fake calculation
// Set the new calculated total
$order->set_total( $new_total );
}
Code goes in function.php file of your active child theme (or theme).
Tested and works.
Some explanations here: Add extra meta for orders in Woocommerce