Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Comfythemes_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 Comfythemes_Woocommerce_Auto_Stock_Restore();
- if ( ! class_exists( 'WC_Auto_Stock_Restore' ) ) {
- class WC_Auto_Stock_Restore {
- function __construct() {
- add_action( 'woocommerce_order_status_processing_to_cancelled', array( $this, 'restore_order_stock' ), 10, 2 );
- add_action( 'woocommerce_order_status_completed_to_cancelled', array( $this, 'restore_order_stock' ), 10, 2 );
- add_action( 'woocommerce_order_status_on-hold_to_cancelled', array( $this, 'restore_order_stock' ), 10, 2 );
- add_action( 'woocommerce_order_status_processing_to_refunded', array( $this, 'restore_order_stock' ), 10, 2 );
- add_action( 'woocommerce_order_status_completed_to_refunded', array( $this, 'restore_order_stock' ), 10, 2 );
- add_action( 'woocommerce_order_status_on-hold_to_refunded', array( $this, 'restore_order_stock' ), 10, 2 );
- }
- public function restore_order_stock( $order_id, $order ) {
- $items = $order->get_items();
- if ( ! get_option('woocommerce_manage_stock') == 'yes' && ! count( $items ) > 0 )
- return; // We exit
- foreach ( $order->get_items() as $item ) {
- $product_id = $item->get_product_id();
- if ( $product_id > 0 ) {
- $product = $item->get_product();
- if ( $product && $product->exists() && $product->managing_stock() ) {
- // Get the product initial stock quantity (before update)
- $initial_stock = $product->get_stock_quantity();
- $item_qty = apply_filters( 'woocommerce_order_item_quantity', $item->get_quantity(), $this, $item );
- // Update the product stock quantity
- // Replace DEPRECATED methods: increase_stock() & discrease_stock()
- wc_update_product_stock( $product, $item_qty, 'increase' );
- // Get the product updated stock quantity
- $updated_stock = $initial_stock + $item_qty;
- do_action( 'woocommerce_auto_stock_restored', $product, $item );
- // A unique Order note: Store each order note in an array…
- $order_note[] = sprintf( __( 'Product ID #%s stock incremented from %s to %s.', 'woocommerce' ), $product_id, $initial_stock, $updated_stock);
- // DEPRECATED & NO LONGER NEEDED - can be removed
- //$order->send_stock_notifications( $product, $updated_stock, $item_qty );
- }
- }
- }
- // Adding a unique composite order note (for multiple items)
- $order_notes = count($order_note) > 1 ? implode(' | ', $order_note) : $order_note[0];
- $order->add_order_note( $order_notes );
- }
- }
- $GLOBALS['wc_auto_stock_restore'] = new WC_Auto_Stock_Restore();
- }
- class Comfythemes_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 Comfythemes_Woocommerce_Auto_Stock_Restore()
Add Comment
Please, Sign In to add comment