Jake Voelcker
Jake Voelcker

Reputation: 23

"woocommerce_can_reduce_order_stock" filter is not working on backend

I have a custom order status called 'quote', and I have added the following code to try and prevent stock levels being decremented for orders with this status.

function bw_do_not_reduce_quote_stock( $reduce_stock, $order ) {
    if ( $order->has_status( 'quote' ) ) {
        $reduce_stock = false;
    }
    return $reduce_stock;
}

add_filter( 'woocommerce_can_reduce_order_stock', 'bw_do_not_reduce_quote_stock', 10, 2 );

This works for orders placed on the front-end website. But if the admin adds or edits an order on the backend, the stock is decremented.

Is there an alternative hook for the backend? Or am I missing something else?

Upvotes: 2

Views: 715

Answers (1)

7uc1f3r
7uc1f3r

Reputation: 29624

In addition to your current code, add the woocommerce_prevent_adjust_line_item_product_stock filter hook

/**
 * Prevent adjust line item
 * 
 * @param $prevent
 * @param $item
 * @param $quantity
 */
function filter_woocommerce_prevent_adjust_line_item_product_stock ( $prevent, $item, $quantity ) {
    // Get order
    $order = $item->get_order();
    
    if ( $order->has_status( 'quote' ) ) {
        $prevent = true;
    }

    return $prevent;
}
add_filter( 'woocommerce_prevent_adjust_line_item_product_stock', 'filter_woocommerce_prevent_adjust_line_item_product_stock', 10, 3 );

Upvotes: 1

Related Questions