WordPress at Your Fingertips
function is not described

Automattic\WooCommerce\Checkout\Helpers

ReserveStock::reserve_stock_for_order() public WC 1.0

Put a temporary hold on stock for an order if enough is available.

{} It's a method of the class: ReserveStock{}

Hooks from the method

Return

null. Nothing.

Usage

$ReserveStock = new ReserveStock();
$ReserveStock->reserve_stock_for_order( $order, $minutes );
$order(\WC_Order) (required)
Order object.
$minutes(int)
How long to reserve stock in minutes.
Default: woocommerce_hold_stock_minutes

Code of ReserveStock::reserve_stock_for_order() WC 5.9.0

public function reserve_stock_for_order( $order, $minutes = 0 ) {
	$minutes = $minutes ? $minutes : (int) get_option( 'woocommerce_hold_stock_minutes', 60 );

	if ( ! $minutes || ! $this->is_enabled() ) {
		return;
	}

	try {
		$items = array_filter(
			$order->get_items(),
			function( $item ) {
				return $item->is_type( 'line_item' ) && $item->get_product() instanceof \WC_Product && $item->get_quantity() > 0;
			}
		);
		$rows  = array();

		foreach ( $items as $item ) {
			$product = $item->get_product();

			if ( ! $product->is_in_stock() ) {
				throw new ReserveStockException(
					'woocommerce_product_out_of_stock',
					sprintf(
						/* translators: %s: product name */
						__( '"%s" is out of stock and cannot be purchased.', 'woocommerce' ),
						$product->get_name()
					),
					403
				);
			}

			// If stock management is off, no need to reserve any stock here.
			if ( ! $product->managing_stock() || $product->backorders_allowed() ) {
				continue;
			}

			$managed_by_id = $product->get_stock_managed_by_id();

			/**
			 * Filter order item quantity.
			 *
			 * @param int|float             $quantity Quantity.
			 * @param WC_Order              $order    Order data.
			 * @param WC_Order_Item_Product $item Order item data.
			 */
			$item_quantity = apply_filters( 'woocommerce_order_item_quantity', $item->get_quantity(), $order, $item );

			$rows[ $managed_by_id ] = isset( $rows[ $managed_by_id ] ) ? $rows[ $managed_by_id ] + $item_quantity : $item_quantity;
		}

		if ( ! empty( $rows ) ) {
			foreach ( $rows as $product_id => $quantity ) {
				$this->reserve_stock_for_product( $product_id, $quantity, $order, $minutes );
			}
		}
	} catch ( ReserveStockException $e ) {
		$this->release_stock_for_order( $order );
		throw $e;
	}
}