Automattic\WooCommerce\EmailEditor\Integrations\WooCommerce\Renderer\Blocks

Product_Collection::get_user_cart_product_ids_from_contextprivateWC 1.0

Get cart product IDs from rendering context using user ID or email.

Method of the class: Product_Collection{}

No Hooks.

Returns

Array. Array of product IDs from the user's cart.

Usage

// private - for code of main (parent) class only
$result = $this->get_user_cart_product_ids_from_context( $rendering_context ): array;
$rendering_context(Rendering_Context) (required)
Rendering context.

Product_Collection::get_user_cart_product_ids_from_context() code WC 10.5.0

private function get_user_cart_product_ids_from_context( Rendering_Context $rendering_context ): array {
	$user_id = $rendering_context->get_user_id();
	$email   = $rendering_context->get_recipient_email();

	// Use shared utility if available (WooCommerce 10.4+).
	if ( class_exists( '\Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils' ) &&
		method_exists( '\Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils', 'get_cart_product_ids_for_user' ) ) {
		// @phpstan-ignore-next-line - Method exists in newer WooCommerce versions.
		return \Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils::get_cart_product_ids_for_user( $user_id, $email );
	}

	// Fallback: Get user ID from email if needed, then fetch cart.
	if ( ! $user_id && $email ) {
		$user = get_user_by( 'email', $email );
		if ( $user ) {
			$user_id = $user->ID;
		}
	}

	if ( ! $user_id ) {
		return array();
	}

	// Fallback implementation for older WooCommerce versions.
	$cart_data = get_user_meta( $user_id, '_woocommerce_persistent_cart_' . get_current_blog_id(), true );

	if ( ! is_array( $cart_data ) || empty( $cart_data ) || ! isset( $cart_data['cart'] ) || ! is_array( $cart_data['cart'] ) ) {
		return array();
	}

	$product_ids = array();

	foreach ( $cart_data['cart'] as $cart_item ) {
		if ( is_array( $cart_item ) && isset( $cart_item['product_id'] ) && is_numeric( $cart_item['product_id'] ) ) {
			$product_ids[] = (int) $cart_item['product_id'];
		}
	}

	return array_unique( $product_ids );
}