Automattic\WooCommerce\StoreApi\Schemas\V1

CartSchema::get_item_response()publicWC 1.0

Convert a woo cart into an object suitable for the response.

Метод класса: CartSchema{}

Хуков нет.

Возвращает

Массив.

Использование

$CartSchema = new CartSchema();
$CartSchema->get_item_response( $cart );
$cart(\WC_Cart) (обязательный)
Cart class instance.

Код CartSchema::get_item_response() WC 7.5.1

public function get_item_response( $cart ) {
	$controller = new CartController();

	// Get cart errors first so if recalculations are performed, it's reflected in the response.
	$cart_errors = $this->get_cart_errors( $cart );

	// The core cart class will not include shipping in the cart totals if `show_shipping()` returns false. This can
	// happen if an address is required, or through the use of hooks. This tracks if shipping has actually been
	// calculated so we can avoid returning costs and rates prematurely.
	$has_calculated_shipping = $cart->show_shipping();

	// Get shipping packages to return in the response from the cart.
	$shipping_packages = $has_calculated_shipping ? $controller->get_shipping_packages() : [];

	// Get visible cross sells products.
	$cross_sells = array_filter( array_map( 'wc_get_product', $cart->get_cross_sells() ), 'wc_products_array_filter_visible' );

	return [
		'coupons'                 => $this->get_item_responses_from_schema( $this->coupon_schema, $cart->get_applied_coupons() ),
		'shipping_rates'          => $this->get_item_responses_from_schema( $this->shipping_rate_schema, $shipping_packages ),
		'shipping_address'        => $this->shipping_address_schema->get_item_response( wc()->customer ),
		'billing_address'         => $this->billing_address_schema->get_item_response( wc()->customer ),
		'items'                   => $this->get_item_responses_from_schema( $this->item_schema, $cart->get_cart() ),
		'items_count'             => $cart->get_cart_contents_count(),
		'items_weight'            => wc_get_weight( $cart->get_cart_contents_weight(), 'g' ),
		'cross_sells'             => $this->get_item_responses_from_schema( $this->cross_sells_item_schema, $cross_sells ),
		'needs_payment'           => $cart->needs_payment(),
		'needs_shipping'          => $cart->needs_shipping(),
		'has_calculated_shipping' => $has_calculated_shipping,
		'fees'                    => $this->get_item_responses_from_schema( $this->fee_schema, $cart->get_fees() ),
		'totals'                  => (object) $this->prepare_currency_response(
			[
				'total_items'        => $this->prepare_money_response( $cart->get_subtotal(), wc_get_price_decimals() ),
				'total_items_tax'    => $this->prepare_money_response( $cart->get_subtotal_tax(), wc_get_price_decimals() ),
				'total_fees'         => $this->prepare_money_response( $cart->get_fee_total(), wc_get_price_decimals() ),
				'total_fees_tax'     => $this->prepare_money_response( $cart->get_fee_tax(), wc_get_price_decimals() ),
				'total_discount'     => $this->prepare_money_response( $cart->get_discount_total(), wc_get_price_decimals() ),
				'total_discount_tax' => $this->prepare_money_response( $cart->get_discount_tax(), wc_get_price_decimals() ),
				'total_shipping'     => $has_calculated_shipping ? $this->prepare_money_response( $cart->get_shipping_total(), wc_get_price_decimals() ) : null,
				'total_shipping_tax' => $has_calculated_shipping ? $this->prepare_money_response( $cart->get_shipping_tax(), wc_get_price_decimals() ) : null,

				// Explicitly request context='edit'; default ('view') will render total as markup.
				'total_price'        => $this->prepare_money_response( $cart->get_total( 'edit' ), wc_get_price_decimals() ),
				'total_tax'          => $this->prepare_money_response( $cart->get_total_tax(), wc_get_price_decimals() ),
				'tax_lines'          => $this->get_tax_lines( $cart ),
			]
		),
		'errors'                  => $cart_errors,
		'payment_requirements'    => $this->extend->get_payment_requirements(),
		self::EXTENDING_KEY       => $this->get_extended_data( self::IDENTIFIER ),
	];
}