WC_Cart::check_cart_item_stock
Looks through the cart to check each item is in stock. If not, add an error.
Метод класса: WC_Cart{}
Хуки из метода
Возвращает
true|false|WP_Error.
Использование
$WC_Cart = new WC_Cart(); $WC_Cart->check_cart_item_stock();
Код WC_Cart::check_cart_item_stock() WC Cart::check cart item stock WC 10.5.2
public function check_cart_item_stock() {
$error = new WP_Error();
$product_qty_in_cart = $this->get_cart_item_quantities();
$current_session_order_id = isset( WC()->session->order_awaiting_payment ) ? absint( WC()->session->order_awaiting_payment ) : absint( WC()->session->get( 'store_api_draft_order', 0 ) );
foreach ( $this->get_cart() as $values ) {
$product = $values['data'];
// Check stock based on stock-status.
if ( ! $product->is_in_stock() ) {
/* translators: %s: product name */
$error->add( 'out-of-stock', sprintf( __( 'Sorry, "%s" is not in stock. Please edit your cart and try again. We apologize for any inconvenience caused.', 'woocommerce' ), $product->get_name() ) );
return $error;
}
// We only need to check products managing stock, with a limited stock qty.
if ( ! $product->managing_stock() || $product->backorders_allowed() ) {
continue;
}
// Check stock based on all items in the cart and consider any held stock within pending orders.
$held_stock = wc_get_held_stock_quantity( $product, $current_session_order_id );
$required_stock = $product_qty_in_cart[ $product->get_stock_managed_by_id() ];
/**
* Allows filter if product have enough stock to get added to the cart.
*
* @since 4.6.0
* @param bool $has_stock If have enough stock.
* @param WC_Product $product Product instance.
* @param array $values Cart item values.
*/
if ( apply_filters( 'woocommerce_cart_item_required_stock_is_not_enough', $product->get_stock_quantity() < ( $held_stock + $required_stock ), $product, $values ) ) {
/* translators: 1: product name 2: quantity in stock */
$error->add( 'out-of-stock', sprintf( __( 'Sorry, we do not have enough "%1$s" in stock to fulfill your order (%2$s available). We apologize for any inconvenience caused.', 'woocommerce' ), $product->get_name(), wc_format_stock_quantity_for_display( $product->get_stock_quantity() - $held_stock, $product ) ) );
return $error;
}
}
return true;
}