Commit 6be78067582 for woocommerce
commit 6be78067582a2db1474458447320d47dadc4e372
Author: Darren Ethier <darren@roughsmootheng.in>
Date: Wed Aug 19 09:18:09 2026 -0400
Restore recently viewed widget filter compatibility (#67854)
diff --git a/plugins/woocommerce/changelog/fix-wooairr-97-restore-recently-viewed-query-ids b/plugins/woocommerce/changelog/fix-wooairr-97-restore-recently-viewed-query-ids
new file mode 100644
index 00000000000..df022dfbd83
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-wooairr-97-restore-recently-viewed-query-ids
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Restore the full Recently Viewed Products cookie ID list for widget query filters to preserve extension compatibility.
diff --git a/plugins/woocommerce/includes/widgets/class-wc-widget-recently-viewed.php b/plugins/woocommerce/includes/widgets/class-wc-widget-recently-viewed.php
index 69619f519fc..466e851a5ab 100644
--- a/plugins/woocommerce/includes/widgets/class-wc-widget-recently-viewed.php
+++ b/plugins/woocommerce/includes/widgets/class-wc-widget-recently-viewed.php
@@ -51,7 +51,7 @@ class WC_Widget_Recently_Viewed extends WC_Widget {
*/
public function widget( $args, $instance ) {
$viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', wp_unslash( $_COOKIE['woocommerce_recently_viewed'] ) ) : array(); // @codingStandardsIgnoreLine
- $viewed_products = array_slice( array_reverse( array_filter( array_map( 'absint', $viewed_products ) ) ), 0, 15 );
+ $viewed_products = array_reverse( array_filter( array_map( 'absint', $viewed_products ) ) );
if ( empty( $viewed_products ) ) {
return;
@@ -71,7 +71,7 @@ class WC_Widget_Recently_Viewed extends WC_Widget {
);
if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) {
- $query_args['tax_query'] = array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- Recently viewed product IDs are capped at 15.
+ $query_args['tax_query'] = array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- Required to exclude hidden out-of-stock products from the recently viewed widget.
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
diff --git a/plugins/woocommerce/tests/legacy/unit-tests/widgets/class-wc-tests-widget.php b/plugins/woocommerce/tests/legacy/unit-tests/widgets/class-wc-tests-widget.php
index c5b610ba77f..878555a49c7 100644
--- a/plugins/woocommerce/tests/legacy/unit-tests/widgets/class-wc-tests-widget.php
+++ b/plugins/woocommerce/tests/legacy/unit-tests/widgets/class-wc-tests-widget.php
@@ -66,9 +66,9 @@ class WC_Tests_Widget extends WC_Unit_Test_Case {
}
/**
- * @testdox Should limit recently viewed widget queries from oversized cookies.
+ * @testdox Should preserve extension-provided recently viewed cookie IDs in widget queries.
*/
- public function test_recently_viewed_widget_query_limits_oversized_cookie(): void {
+ public function test_recently_viewed_widget_query_preserves_extension_cookie_ids(): void {
$viewed_product_ids = range( 1, 20 );
$query_args = array();
$query_args_filter = static function ( $args ) use ( &$query_args ) {
@@ -82,19 +82,19 @@ class WC_Tests_Widget extends WC_Unit_Test_Case {
add_filter( 'woocommerce_recently_viewed_products_widget_query_args', $query_args_filter );
try {
- $widget = new WC_Widget_Recently_Viewed();
+ $sut = new WC_Widget_Recently_Viewed();
ob_start();
try {
- $widget->widget( array(), array() );
+ $sut->widget( array(), array() );
} finally {
ob_end_clean();
}
$this->assertSame(
- array_slice( array_reverse( $viewed_product_ids ), 0, 15 ),
+ array_reverse( $viewed_product_ids ),
$query_args['post__in'],
- 'An oversized recently viewed cookie should only send the 15 newest product IDs to the query.'
+ 'The recently viewed widget query should preserve every product ID provided through the shared cookie.'
);
} finally {
remove_filter( 'woocommerce_recently_viewed_products_widget_query_args', $query_args_filter );