Automattic\WooCommerce\EmailEditor\Integrations\WooCommerce\Renderer\Blocks
Product_Collection::get_user_cart_product_ids_from_context
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() 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 );
}