Automattic\WooCommerce\StoreApi\Routes\V1

ShopperListItems::resolve_item_payloadprivateWC 1.0

Resolve the POST input into a uniform payload (product lookup id, variation, quantity).

Accepts either an existing cart_item_key, or direct product_id/variation_id/variation.

Method of the class: ShopperListItems{}

No Hooks.

Returns

Array{0:Int,1:Array,2:Int}. [ lookup_id, variation, quantity ].

Usage

// private - for code of main (parent) class only
$result = $this->resolve_item_payload( $request ): array;
$request(WP_REST_Request) (required)
Request object.

ShopperListItems::resolve_item_payload() code WC 10.9.1

private function resolve_item_payload( \WP_REST_Request $request ): array {
	$cart_item_key = (string) $request->get_param( 'cart_item_key' );

	if ( $cart_item_key ) {
		if ( ! did_action( 'woocommerce_load_cart_from_session' ) || ! wc()->cart ) {
			wc_load_cart();
		}

		$cart_contents = wc()->cart->get_cart();
		if ( empty( $cart_contents[ $cart_item_key ] ) ) {
			throw new RouteException( 'woocommerce_rest_shopper_list_invalid_cart_item_key', esc_html__( 'No cart item exists for the supplied key.', 'woocommerce' ), 404 );
		}

		$line            = $cart_contents[ $cart_item_key ];
		$product_id      = absint( $line['product_id'] ?? 0 );
		$variation_id    = absint( $line['variation_id'] ?? 0 );
		$variation_attrs = isset( $line['variation'] ) && is_array( $line['variation'] ) ? $line['variation'] : array();

		return array(
			$variation_id ? $variation_id : $product_id,
			$variation_attrs,
			absint( $line['quantity'] ?? 1 ),
		);
	}//end if

	$product_id = absint( $request->get_param( 'product_id' ) );
	if ( ! $product_id ) {
		throw new RouteException( 'woocommerce_rest_shopper_list_missing_item_input', esc_html__( 'Provide cart_item_key or product_id.', 'woocommerce' ), 400 );
	}

	$variation = wp_list_pluck( (array) $request->get_param( 'variation' ), 'value', 'attribute' );

	return array(
		$product_id,
		(array) array_combine(
			array_map( 'wc_variation_attribute_name', array_keys( $variation ) ),
			array_values( $variation )
		),
		absint( $request->get_param( 'quantity' ) ),
	);
}