All WooCommerce orders go to either “processing”, “completed”, “on-hold” and other default order statuses based on the payment method and product type.
Sometimes these statuses are not enough. For example, you might need to mark certain orders in a different way for tracking, filtering, exporting purposes. Or you might want to disable default emails by bypassing the default order status changes.
Either way, setting a custom order status automatically once the order is processed is quite easy. And today we’ll see which PHP snippets you need in order to make this work!
PHP Snippet: Assign Custom Order Status during WooCommerce Checkout Process
/** * @snippet Set Custom Order Status during Checkout * @how-to Get CustomizeWoo.com FREE * @sourcecode https://businessbloomer.com/?p=77911 * @author Rodolfo Melogli * @compatible WooCommerce 3.5.4 * @donate $9 https://businessbloomer.com/bloomer-armada/ */ // --------------------- // 1. Register Order Status add_filter( 'woocommerce_register_shop_order_post_statuses' , 'bbloomer_register_custom_order_status' ); function bbloomer_register_custom_order_status( $order_statuses ){ // Status must start with "wc-" $order_statuses [ 'wc-custom-status' ] = array ( 'label' => _x( 'Custom Status' , 'Order status' , 'woocommerce' ), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Custom Status <span class="count">(%s)</span>' , 'Custom Status <span class="count">(%s)</span>' , 'woocommerce' ), ); return $order_statuses ; } // --------------------- // 2. Show Order Status in the Dropdown @ Single Order and "Bulk Actions" @ Orders add_filter( 'wc_order_statuses' , 'bbloomer_show_custom_order_status' ); function bbloomer_show_custom_order_status( $order_statuses ) { $order_statuses [ 'wc-custom-status' ] = _x( 'Custom Status' , 'Order status' , 'woocommerce' ); return $order_statuses ; } add_filter( 'bulk_actions-edit-shop_order' , 'bbloomer_get_custom_order_status_bulk' ); function bbloomer_get_custom_order_status_bulk( $bulk_actions ) { // Note: "mark_" must be there instead of "wc" $bulk_actions [ 'mark_custom-status' ] = 'Change status to custom status' ; return $bulk_actions ; } // --------------------- // 3. Set Custom Order Status @ WooCommerce Checkout Process add_action( 'woocommerce_thankyou' , 'bbloomer_thankyou_change_order_status' ); function bbloomer_thankyou_change_order_status( $order_id ){ if ( ! $order_id ) return ; $order = wc_get_order( $order_id ); // Status without the "wc-" prefix $order ->update_status( 'custom-status' ); } |
No comments:
Post a Comment