Commit f2edf3671fd for woocommerce

commit f2edf3671fd6d4af9a8536c042a3c2eae352a6da
Author: Alba Rincón <albarin@users.noreply.github.com>
Date:   Mon Apr 13 11:22:57 2026 +0200

    Prime caches in `woocommerce_cross_sell_display` to reduce cart page queries (#64085)

    * Prime post caches in woocommerce_cross_sell_display() to reduce cart page queries

    * Add changefile(s) from automation for the following project(s): woocommerce

    ---------

    Co-authored-by: woocommercebot <woocommercebot@users.noreply.github.com>

diff --git a/plugins/woocommerce/changelog/64085-fix-prime-cart-cross-sells b/plugins/woocommerce/changelog/64085-fix-prime-cart-cross-sells
new file mode 100644
index 00000000000..98a53500468
--- /dev/null
+++ b/plugins/woocommerce/changelog/64085-fix-prime-cart-cross-sells
@@ -0,0 +1,4 @@
+Significance: patch
+Type: performance
+
+Reduce the number of database queries on the classic cart page by priming post and image caches in `woocommerce_cross_sell_display()`.
\ No newline at end of file
diff --git a/plugins/woocommerce/includes/wc-template-functions.php b/plugins/woocommerce/includes/wc-template-functions.php
index 905b4a4cc27..dcbdeeb72d8 100644
--- a/plugins/woocommerce/includes/wc-template-functions.php
+++ b/plugins/woocommerce/includes/wc-template-functions.php
@@ -2515,9 +2515,14 @@ if ( ! function_exists( 'woocommerce_cross_sell_display' ) ) {
 		}

 		// Get visible cross sells then sort them at random.
-		$cross_sells = isset( WC()->cart )
-			? array_filter( array_map( 'wc_get_product', WC()->cart->get_cross_sells() ), 'wc_products_array_filter_visible' )
-			: array();
+		$cross_sells    = array();
+		$cross_sell_ids = isset( WC()->cart ) ? WC()->cart->get_cross_sells() : array();
+		if ( ! empty( $cross_sell_ids ) ) {
+			// Prime caches to reduce future queries.
+			_prime_post_caches( $cross_sell_ids );
+
+			$cross_sells = array_filter( array_map( 'wc_get_product', $cross_sell_ids ), 'wc_products_array_filter_visible' );
+		}

 		wc_set_loop_prop( 'name', 'cross-sells' );
 		wc_set_loop_prop( 'columns', apply_filters( 'woocommerce_cross_sells_columns', $columns ) );
@@ -2535,6 +2540,11 @@ if ( ! function_exists( 'woocommerce_cross_sell_display' ) ) {
 		$limit       = intval( apply_filters( 'woocommerce_cross_sells_total', $limit ) );
 		$cross_sells = $limit > 0 ? array_slice( $cross_sells, 0, $limit ) : $cross_sells;

+		if ( ! empty( $cross_sells ) ) {
+			// Prime caches to reduce future queries.
+			_prime_post_caches( array_filter( array_map( fn( $product ) => (int) $product->get_image_id(), $cross_sells ) ) );
+		}
+
 		wc_get_template(
 			'cart/cross-sells.php',
 			array(