Last active
December 20, 2017 09:30
-
-
Save Luminus/99981aece22878ee82e28e85a94a06c1 to your computer and use it in GitHub Desktop.
Automatically restore WooCommerce Stock when you cancel an order
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Luminus_Woocommerce_Auto_Stock_Restore { | |
function __construct() { | |
add_action( 'woocommerce_order_status_processing_to_cancelled', array( $this, 'restore_order_stock' ), 10, 1 ); | |
add_action( 'woocommerce_order_status_completed_to_cancelled', array( $this, 'restore_order_stock' ), 10, 1 ); | |
add_action( 'woocommerce_order_status_on-hold_to_cancelled', array( $this, 'restore_order_stock' ), 10, 1 ); | |
// add_action( 'woocommerce_order_status_processing_to_refunded', array( $this, 'restore_order_stock' ), 10, 1 ); | |
// add_action( 'woocommerce_order_status_completed_to_refunded', array( $this, 'restore_order_stock' ), 10, 1 ); | |
// add_action( 'woocommerce_order_status_on-hold_to_refunded', array( $this, 'restore_order_stock' ), 10, 1 ); | |
} | |
public function restore_order_stock( $order_id ) { | |
$order = new WC_Order( $order_id ); | |
if ( ! get_option('woocommerce_manage_stock') == 'yes' && ! sizeof( $order->get_items() ) > 0 ) { | |
return; | |
} | |
foreach ( $order->get_items() as $item ) { | |
if ( $item['product_id'] > 0 ) { | |
$_product = $order->get_product_from_item( $item ); | |
if ( $_product && $_product->exists() && $_product->managing_stock() ) { | |
$old_stock = $_product->stock; | |
$qty = apply_filters( 'woocommerce_order_item_quantity', $item['qty'], $this, $item ); | |
$new_quantity = $_product->increase_stock( $qty ); | |
do_action( 'woocommerce_auto_stock_restored', $_product, $item ); | |
$order->add_order_note( sprintf( __( 'Item #%s stock incremented from %s to %s.', 'woocommerce' ), $item['product_id'], $old_stock, $new_quantity) ); | |
$order->send_stock_notifications( $_product, $new_quantity, $item['qty'] ); | |
} | |
} | |
} | |
} | |
} | |
new Luminus_Woocommerce_Auto_Stock_Restore(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment