Luc
Luc

Reputation: 1825

Which hook(s) are triggered when WooCommerce product stock is updated

I have a custom field in my products, that needs to be updated through a function, whenever the stock in any of the variations change.

Are there hooks for this? If so, which ones and what is their output ($post_id for example)?

Upvotes: 2

Views: 8440

Answers (2)

Mehbub Rashid
Mehbub Rashid

Reputation: 663

I have achieved the same using woocommerce_product_set_stock and woocommerce_variation_set_stock hook.

These hooks run when the stock is changed (either increased, or decreased). Even after the stock is decreased after product purchase.

add_action( 'woocommerce_product_set_stock', 'stock_changed' );
add_action( 'woocommerce_variation_set_stock', 'stock_changed' );
function stock_changed( $product ) {
    // Do something
}

Since WooCommerce 4.9+, woocommerce_product_before_set_stock and woocommerce_variation_before_set_stock are added to signal that the value of stock_quantity for a product/variation is about to change.

add_action( 'woocommerce_product_before_set_stock', 'stock_about_to_change' );
add_action( 'woocommerce_variation_before_set_stock', 'stock_about_to_change' );
function stock_about_to_change( $product ) {
    // Do something
}

Upvotes: 8

pa7ryk
pa7ryk

Reputation: 551

I think you are looking for woocommerce_reduce_order_stock action. More info about this hook.

Here is a whole list of available hooks.

-- EDIT

Function should look like this:

function test( $order ) { // you get an object $order as an argument
  $items = $order->get_items();
  $items_ids = array();
  foreach( $items as $item ) {
    $items_ids[] = $item['product_id'];
  }
  die( print_r($items_ids) ); // it should break script while reduce stock
}
add_action( 'woocommerce_reduce_order_stock', 'test' );

Upvotes: 7

Related Questions