From 041cced998b688a84b310f16b2802fb060e321f8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 07:00:53 +0800 Subject: [PATCH] Cherry pick 51081 into release/9.3 (#51106) --- plugins/woocommerce/readme.txt | 1 + .../Admin/Onboarding/OnboardingThemes.php | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/plugins/woocommerce/readme.txt b/plugins/woocommerce/readme.txt index a94180833f3..3421a4d4871 100644 --- a/plugins/woocommerce/readme.txt +++ b/plugins/woocommerce/readme.txt @@ -171,6 +171,7 @@ WooCommerce comes with some sample data you can use to see how products look; im = 9.3.0 2024-XX-XX = +* Fix - Add check to ensure themes API is safe [#51081](https://github.com/woocommerce/woocommerce/pull/51081) * Fix - CYS - Remove usage of `prepare_item_for_response` function in `Images` endpoint. [#50923](https://github.com/woocommerce/woocommerce/pull/50923) * Fix - Add ability for a screen reader to announce the current tab on a single product page. [#50373](https://github.com/woocommerce/woocommerce/pull/50373) * Fix - Add a label to the product pagination for the woocommerce pagination [#49924](https://github.com/woocommerce/woocommerce/pull/49924) diff --git a/plugins/woocommerce/src/Internal/Admin/Onboarding/OnboardingThemes.php b/plugins/woocommerce/src/Internal/Admin/Onboarding/OnboardingThemes.php index e5569f0f42a..e6f71d90601 100644 --- a/plugins/woocommerce/src/Internal/Admin/Onboarding/OnboardingThemes.php +++ b/plugins/woocommerce/src/Internal/Admin/Onboarding/OnboardingThemes.php @@ -78,10 +78,10 @@ class OnboardingThemes { usort( $themes, function ( $product_1, $product_2 ) { - if ( ! property_exists( $product_1, 'id' ) || ! property_exists( $product_1, 'slug' ) ) { + if ( ! is_object( $product_1 ) || ! property_exists( $product_1, 'id' ) || ! property_exists( $product_1, 'slug' ) ) { return 1; } - if ( ! property_exists( $product_2, 'id' ) || ! property_exists( $product_2, 'slug' ) ) { + if ( ! is_object( $product_2 ) || ! property_exists( $product_2, 'id' ) || ! property_exists( $product_2, 'slug' ) ) { return 1; } if ( in_array( 'Storefront', array( $product_1->slug, $product_2->slug ), true ) ) { @@ -110,16 +110,22 @@ class OnboardingThemes { $themes = array(); if ( ! is_wp_error( $theme_data ) ) { - $theme_data = json_decode( $theme_data['body'] ); - $woo_themes = property_exists( $theme_data, 'products' ) ? $theme_data->products : array(); - $sorted_themes = self::sort_woocommerce_themes( $woo_themes ); + $theme_data = json_decode( $theme_data['body'] ); - foreach ( $sorted_themes as $theme ) { - $slug = sanitize_title_with_dashes( $theme->slug ); - $themes[ $slug ] = (array) $theme; - $themes[ $slug ]['is_installed'] = false; - $themes[ $slug ]['has_woocommerce_support'] = true; - $themes[ $slug ]['slug'] = $slug; + if ( $theme_data ) { + $woo_themes = property_exists( $theme_data, 'products' ) ? $theme_data->products : array(); + $sorted_themes = self::sort_woocommerce_themes( $woo_themes ); + + foreach ( $sorted_themes as $theme ) { + if ( ! isset( $theme->slug ) ) { + continue; + } + $slug = sanitize_title_with_dashes( $theme->slug ); + $themes[ $slug ] = (array) $theme; + $themes[ $slug ]['is_installed'] = false; + $themes[ $slug ]['has_woocommerce_support'] = true; + $themes[ $slug ]['slug'] = $slug; + } } }