From 3b1d1bfa7a6c968f5cba4750ae4f2b06d7d0d866 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 21 Aug 2020 21:49:02 +0000 Subject: [PATCH] Code Modernization: Fix PHP 8 "ArgumentCountError: array_merge() does not accept unknown named parameters" fatal error in `retrieve_widgets()`. As per the documentation of `call_user_func_array()`, the `$param_arr` should be a (numerically) indexed array, not a string-keyed array. As we can use the spread operator in PHP 5.6+, there isn't really any need to use `call_user_func_array()` anyhow, we can call the `array_merge()` function directly. The caveat to this is that the spread operator only works on numerically indexed arrays, so we need to wrap the `$sidebars_widgets` variable in a call to `array_values()` when using the spread operator. Using `array_values()` in the existing `call_user_func_array()` call would also have solved this, but the solution now proposed, has the added benefit of getting rid of the overhead of `call_user_func_array()`. Props jrf. See #50913. git-svn-id: https://develop.svn.wordpress.org/trunk@48839 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/widgets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/widgets.php b/src/wp-includes/widgets.php index 6f2701e5ea..0d176687fb 100644 --- a/src/wp-includes/widgets.php +++ b/src/wp-includes/widgets.php @@ -1262,7 +1262,7 @@ function retrieve_widgets( $theme_changed = false ) { $sidebars_widgets = wp_map_sidebars_widgets( $sidebars_widgets ); // Find hidden/lost multi-widget instances. - $shown_widgets = call_user_func_array( 'array_merge', $sidebars_widgets ); + $shown_widgets = array_merge( ...array_values( $sidebars_widgets ) ); $lost_widgets = array_diff( $registered_widgets_ids, $shown_widgets ); foreach ( $lost_widgets as $key => $widget_id ) {