public static function reduce_order_item_stock()
{
check_ajax_referer('order-item', 'security');
if (!current_user_can('edit_shop_orders')) {
die(-1);
}
$order_id = absint($_POST['order_id']);
$order_item_ids = isset($_POST['order_item_ids']) ? $_POST['order_item_ids'] : array();
$order_item_qty = isset($_POST['order_item_qty']) ? $_POST['order_item_qty'] : array();
$order = wc_get_order($order_id);
$order_items = $order->get_items();
$return = array();
if ($order && !empty($order_items) && sizeof($order_item_ids) > 0) {
foreach ($order_items as $item_id => $order_item) {
// Only reduce checked items
if (!in_array($item_id, $order_item_ids)) {
continue;
}
$_product = $order_item->get_product();
if ($_product->exists() && $_product->managing_stock() && isset($order_item_qty[$item_id]) && $order_item_qty[$item_id] > 0) {
$stock_change = apply_filters('woocommerce_reduce_order_stock_quantity', $order_item_qty[$item_id], $item_id);
$new_stock = $_product->reduce_stock($stock_change);
$item_name = $_product->get_sku() ? $_product->get_sku() : $_product->get_id();
$note = sprintf(__('Item %1$s stock reduced from %2$s to %3$s.', 'woocommerce'), $item_name, $new_stock + $stock_change, $new_stock);
$return[] = $note;
$order->add_order_note($note);
}
}
do_action('woocommerce_reduce_order_stock', $order);
if (empty($return)) {
$return[] = __('No products had their stock reduced - they may not have stock management enabled.', 'woocommerce');
}
echo implode(', ', $return);
}
die;
}