I need to do an action when an order is completed.
I Have tried this:
function mysite_woocommerce_payment_complete( $order_id ) {
error_log("callback fired");
}
add_action( 'woocommerce_payment_complete', 'mysite_woocommerce_payment_complete' );
But when I use the checkmark to mark the order as completed here in admin orders screen,
...the hook doesn't fire.
I tried woocommerce_order_status_changed
too, it does the action when I place the order, but does nothing when i mark the order completed.
But when I mark the order completed, I get the email about completing it.
Thanks!
Edit:
I tried woocommerce_order_status_changed
too, this way:
function mysite_woocommerce_payment_complete($order_id, $old_status, $new_status ) {
error_log("$old_status / $new_status \n");
}
add_action( 'woocommerce_order_status_changed', 'mysite_woocommerce_payment_complete', 99, 3 );
but it fires on purchasing (I selected bank transfer) and shows: "pending / on-hold", but not true - see edi2 doesn't fire on manual backend change from "on hold" to "completed". Neither by checkmark nor in single order interface.
Edit2
woocommerce_order_status_changed
and woocommerce_order_status_completed
works, it only outputed my testing "error" into debug.log, not to error_log for some reason.
The woocommerce_payment_complete
i used previously doesn't apply to methods like bank transfer, that's why that didn't work. Thanks to @helgatheviking for the quick and right answer
Well the completed order email is triggered by the following:
as seen here in source.
All "transactional email actions" (ie: actions that trigger the sending of an email) get a
_notification
hook in addition to the normal hook, seen here.Thus
woocommerce_order_status_completed_notification
is an additional hook triggered on thewoocommerce_order_status_completed
hook ifwoocommerce_order_status_completed
is in thewoocommerce_email_actions
array, which it is by default. To avoid any surprised from the emails, I recommend using thewoocommerce_order_status_completed
hook which is fired any time there is an order status change, including from within the admin, see this example: