Do you have a custom WooCommerce Order Status that you want to be able to take payments on? Look no further than the woocommerce_valid_order_statuses_for_payment
filter. I spent an ungodly amount of time looking for this filter today. I knew what I needed, but I didn't know what it was called. I knew there was a wc_order_is_editable
filter that you could add statuses too, so I figured there had to be one to be able to require payment on a custom order status.
Make WooCommerce Custom Order Status Payable
After many trials and tribulations, I present to you my findings:
function filter_woocommerce_valid_order_statuses_for_payment($array, $instance)
{
$my_order_status = array('cancelled', '<custom_order_status>');
return array_merge($array, $my_order_status);
}
// add the filter
add_filter('woocommerce_valid_order_statuses_for_payment', 'filter_woocommerce_valid_order_statuses_for_payment', 10, 2);
This beautifully simple piece of code will add the list of order statuses to the statuses that can access the checkout or Form Pay.
Why I Figured This Out
I developed a workflow that would allow a client to take deposits on custom orders. It involves programatically setting the order status to deposit_paid
but the customer needs to still be able to pay the rest of the balance. By adding deposit_paid
to the list of valid order statuses for payment, the customer can come back and pay the rest of the invoice when the order is ready to ship.