Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- add_action( 'woocommerce_reduce_order_stock', function( $order ) {
- // The IDs below are the product IDs for the 2 products I used to test the snippet
- // DO NOT FORGET to change them to the proper product IDs for your installation!!!
- // ALWAYS ALWAYS ALWAYS test on a staging site first.
- $pack_1_id = 1991;
- $pack_6_id = 1990;
- // Check if stock adjustment has already been run for this order to prevent recursion
- if ( get_post_meta( $order->get_id(), '_stock_rebalanced', true ) ) {
- return;
- }
- foreach ( $order->get_items() as $item ) {
- $product_id = $item->get_product_id();
- $qty_bought = $item->get_quantity();
- if ( $product_id == $pack_6_id ) { // Directly reduce the 1-pack stock by 6 times the quantity of 6-packs sold.
- $pack_1 = wc_get_product( $pack_1_id );
- $pack_1_new_stock = $pack_1->get_stock_quantity() - ( $qty_bought * 6 );
- wc_update_product_stock( $pack_1, $pack_1_new_stock, 'set' );
- }
- }
- // Now, recalculate and adjust the stock for the 6-pack based on the remaining 1-pack stock.
- $pack_1 = wc_get_product( $pack_1_id );
- $current_pack_1_stock = $pack_1->get_stock_quantity();
- $new_pack_6_stock = intdiv( $current_pack_1_stock, 6 );
- $pack_6 = wc_get_product( $pack_6_id );
- wc_update_product_stock( $pack_6, $new_pack_6_stock, 'set' );
- update_post_meta( $order->get_id(), '_stock_rebalanced', 'yes' ); // Mark as stock rebalanced to prevent future recursion on this order
- }, 10, 1 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement