From 5e88c36ec2a98462d3082f1912d14dfcb08b0afc Mon Sep 17 00:00:00 2001 From: Anton Vlasenko Date: Wed, 8 Nov 2023 22:01:06 +0100 Subject: [PATCH 1/4] Check variables before passing them to array_merge. array_merge() expects input parameters to be arrays. --- .../fonts-api/class-wp-fonts-resolver.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/experimental/fonts-api/class-wp-fonts-resolver.php b/lib/experimental/fonts-api/class-wp-fonts-resolver.php index 144f7b30acc15..a603743a4f7af 100644 --- a/lib/experimental/fonts-api/class-wp-fonts-resolver.php +++ b/lib/experimental/fonts-api/class-wp-fonts-resolver.php @@ -202,10 +202,20 @@ private static function get_settings() { $settings = static::set_tyopgraphy_settings_array_structure( $settings ); } + // Initialize the font families from settings if set and is an array, otherwise default to an empty array. + $settings_font_families = ( isset( $settings['typography']['fontFamilies']['theme'] ) && is_array( $settings['typography']['fontFamilies']['theme'] ) ) + ? $settings['typography']['fontFamilies']['theme'] + : array(); + + // Initialize the font families from variation if set and is an array, otherwise default to an empty array + $variation_font_families = ( isset( $variation['settings']['typography']['fontFamilies']['theme'] ) && is_array( $variation['settings']['typography']['fontFamilies']['theme'] ) ) + ? $variation['settings']['typography']['fontFamilies']['theme'] + : array(); + // Merge the variation settings with the global settings. $settings['typography']['fontFamilies']['theme'] = array_merge( - $settings['typography']['fontFamilies']['theme'], - $variation['settings']['typography']['fontFamilies']['theme'] + $settings_font_families, + $variation_font_families ); // Make sure there are no duplicates. From 57372912c2d109c8717a2e683cc53a82b4ccdf59 Mon Sep 17 00:00:00 2001 From: Anton Vlasenko Date: Wed, 8 Nov 2023 22:26:18 +0100 Subject: [PATCH 2/4] Fix the comment. --- lib/experimental/fonts-api/class-wp-fonts-resolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/experimental/fonts-api/class-wp-fonts-resolver.php b/lib/experimental/fonts-api/class-wp-fonts-resolver.php index a603743a4f7af..2318005f1211a 100644 --- a/lib/experimental/fonts-api/class-wp-fonts-resolver.php +++ b/lib/experimental/fonts-api/class-wp-fonts-resolver.php @@ -207,7 +207,7 @@ private static function get_settings() { ? $settings['typography']['fontFamilies']['theme'] : array(); - // Initialize the font families from variation if set and is an array, otherwise default to an empty array + // Initialize the font families from variation if set and is an array, otherwise default to an empty array. $variation_font_families = ( isset( $variation['settings']['typography']['fontFamilies']['theme'] ) && is_array( $variation['settings']['typography']['fontFamilies']['theme'] ) ) ? $variation['settings']['typography']['fontFamilies']['theme'] : array(); From 8e94c1c6f6665546815beddabf21b847ce3648a3 Mon Sep 17 00:00:00 2001 From: Anton Vlasenko Date: Thu, 9 Nov 2023 13:49:13 +0100 Subject: [PATCH 3/4] Optimization: don't check for the existence of $settings['typography']['fontFamilies']['theme'] on every iteration of the loop. --- .../fonts-api/class-wp-fonts-resolver.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/experimental/fonts-api/class-wp-fonts-resolver.php b/lib/experimental/fonts-api/class-wp-fonts-resolver.php index 2318005f1211a..fae5aba845b8f 100644 --- a/lib/experimental/fonts-api/class-wp-fonts-resolver.php +++ b/lib/experimental/fonts-api/class-wp-fonts-resolver.php @@ -200,12 +200,12 @@ private static function get_settings() { if ( $set_theme_structure ) { $set_theme_structure = false; $settings = static::set_tyopgraphy_settings_array_structure( $settings ); - } - // Initialize the font families from settings if set and is an array, otherwise default to an empty array. - $settings_font_families = ( isset( $settings['typography']['fontFamilies']['theme'] ) && is_array( $settings['typography']['fontFamilies']['theme'] ) ) - ? $settings['typography']['fontFamilies']['theme'] - : array(); + // Initialize the font families from settings if set and is an array, otherwise default to an empty array. + $settings['typography']['fontFamilies']['theme'] = ( isset( $settings['typography']['fontFamilies']['theme'] ) && is_array( $settings['typography']['fontFamilies']['theme'] ) ) + ? $settings['typography']['fontFamilies']['theme'] + : array(); + } // Initialize the font families from variation if set and is an array, otherwise default to an empty array. $variation_font_families = ( isset( $variation['settings']['typography']['fontFamilies']['theme'] ) && is_array( $variation['settings']['typography']['fontFamilies']['theme'] ) ) @@ -214,7 +214,7 @@ private static function get_settings() { // Merge the variation settings with the global settings. $settings['typography']['fontFamilies']['theme'] = array_merge( - $settings_font_families, + $settings['typography']['fontFamilies']['theme'], $variation_font_families ); From 061bafb4427e51bbcaebf847beb0017eaa914dda Mon Sep 17 00:00:00 2001 From: Anton Vlasenko Date: Thu, 9 Nov 2023 13:52:11 +0100 Subject: [PATCH 4/4] Optimization: ternary is not needed here. --- lib/experimental/fonts-api/class-wp-fonts-resolver.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/experimental/fonts-api/class-wp-fonts-resolver.php b/lib/experimental/fonts-api/class-wp-fonts-resolver.php index fae5aba845b8f..f2299c7c36831 100644 --- a/lib/experimental/fonts-api/class-wp-fonts-resolver.php +++ b/lib/experimental/fonts-api/class-wp-fonts-resolver.php @@ -202,9 +202,9 @@ private static function get_settings() { $settings = static::set_tyopgraphy_settings_array_structure( $settings ); // Initialize the font families from settings if set and is an array, otherwise default to an empty array. - $settings['typography']['fontFamilies']['theme'] = ( isset( $settings['typography']['fontFamilies']['theme'] ) && is_array( $settings['typography']['fontFamilies']['theme'] ) ) - ? $settings['typography']['fontFamilies']['theme'] - : array(); + if ( ! isset( $settings['typography']['fontFamilies']['theme'] ) || ! is_array( $settings['typography']['fontFamilies']['theme'] ) ) { + $settings['typography']['fontFamilies']['theme'] = array(); + } } // Initialize the font families from variation if set and is an array, otherwise default to an empty array.