Commit c254a3c717b for woocommerce
commit c254a3c717ba3b3aaf4de7e0b45584c8351bbfed
Author: Alba Rincón <albarin@users.noreply.github.com>
Date: Mon Mar 30 09:39:10 2026 +0200
Add cache priming to grouped product templates and download permissions (#63797)
* Add cache priming to grouped product structured data, add-to-cart template, and download permissions adjuster
* Add changefile(s) from automation for the following project(s): woocommerce
* Add changefile(s) from automation for the following project(s): woocommerce
* Add cache priming to grouped product structured data, add-to-cart template, and download permissions adjuster
* Code review tweaks.
---------
Co-authored-by: woocommercebot <woocommercebot@users.noreply.github.com>
Co-authored-by: Vladimir Reznichenko <kalessil@gmail.com>
diff --git a/plugins/woocommerce/changelog/63797-add-cache-priming-misc-2 b/plugins/woocommerce/changelog/63797-add-cache-priming-misc-2
new file mode 100644
index 00000000000..c0f6b536750
--- /dev/null
+++ b/plugins/woocommerce/changelog/63797-add-cache-priming-misc-2
@@ -0,0 +1,4 @@
+Significance: patch
+Type: performance
+
+Add missing `_prime_post_caches()` calls in grouped product structured data, grouped product add-to-cart template, and download permissions adjuster to batch-load child product data to reduce individual database queries.
\ No newline at end of file
diff --git a/plugins/woocommerce/includes/class-wc-structured-data.php b/plugins/woocommerce/includes/class-wc-structured-data.php
index dcdcbeeda96..b5f79e4d1e4 100644
--- a/plugins/woocommerce/includes/class-wc-structured-data.php
+++ b/plugins/woocommerce/includes/class-wc-structured-data.php
@@ -288,8 +288,10 @@ class WC_Structured_Data {
}
} elseif ( $product->is_type( ProductType::GROUPED ) ) {
$tax_display_mode = get_option( 'woocommerce_tax_display_shop' );
- $children = array_filter( array_map( 'wc_get_product', $product->get_children() ), 'wc_products_array_filter_visible_grouped' );
- $price_function = 'incl' === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
+ $child_ids = $product->get_children();
+ _prime_post_caches( $child_ids );
+ $children = array_filter( array_map( 'wc_get_product', $child_ids ), 'wc_products_array_filter_visible_grouped' );
+ $price_function = 'incl' === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
foreach ( $children as $child ) {
if ( '' !== $child->get_regular_price() ) {
diff --git a/plugins/woocommerce/includes/wc-template-functions.php b/plugins/woocommerce/includes/wc-template-functions.php
index 078c50a1f23..905b4a4cc27 100644
--- a/plugins/woocommerce/includes/wc-template-functions.php
+++ b/plugins/woocommerce/includes/wc-template-functions.php
@@ -2029,7 +2029,9 @@ if ( ! function_exists( 'woocommerce_grouped_add_to_cart' ) ) {
return;
}
- $products = array_filter( array_map( 'wc_get_product', $product->get_children() ), 'wc_products_array_filter_visible_grouped' );
+ $child_ids = $product->get_children();
+ _prime_post_caches( $child_ids );
+ $products = array_filter( array_map( 'wc_get_product', $child_ids ), 'wc_products_array_filter_visible_grouped' );
if ( $products ) {
wc_get_template(
diff --git a/plugins/woocommerce/src/Internal/DownloadPermissionsAdjuster.php b/plugins/woocommerce/src/Internal/DownloadPermissionsAdjuster.php
index dc489c745b6..4b212c807d5 100644
--- a/plugins/woocommerce/src/Internal/DownloadPermissionsAdjuster.php
+++ b/plugins/woocommerce/src/Internal/DownloadPermissionsAdjuster.php
@@ -44,6 +44,8 @@ class DownloadPermissionsAdjuster {
return;
}
+ _prime_post_caches( $children_ids );
+
$are_any_children_downloadable = false;
foreach ( $children_ids as $child_id ) {
$child = wc_get_product( $child_id );
@@ -111,6 +113,8 @@ class DownloadPermissionsAdjuster {
return;
}
+ _prime_post_caches( $children_ids );
+
$children_with_downloads = array();
foreach ( $children_ids as $child_id ) {
$child = wc_get_product( $child_id );