WordPress Version: 5.5
/**
* Converts the widget settings from single to multi-widget format.
*
* @since 2.8.0
*
* @global array $_wp_sidebars_widgets
*
* @param string $base_name Root ID for all widgets of this type.
* @param string $option_name Option name for this widget type.
* @param array $settings The array of widget instance settings.
* @return array The array of widget settings converted to multi-widget format.
*/
function wp_convert_widget_settings($base_name, $option_name, $settings)
{
// This test may need expanding.
$single = false;
$changed = false;
if (empty($settings)) {
$single = true;
} else {
foreach (array_keys($settings) as $number) {
if ('number' === $number) {
continue;
}
if (!is_numeric($number)) {
$single = true;
break;
}
}
}
if ($single) {
$settings = array(2 => $settings);
// If loading from the front page, update sidebar in memory but don't save to options.
if (is_admin()) {
$sidebars_widgets = get_option('sidebars_widgets');
} else {
if (empty($GLOBALS['_wp_sidebars_widgets'])) {
$GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets', array());
}
$sidebars_widgets =& $GLOBALS['_wp_sidebars_widgets'];
}
foreach ((array) $sidebars_widgets as $index => $sidebar) {
if (is_array($sidebar)) {
foreach ($sidebar as $i => $name) {
if ($base_name === $name) {
$sidebars_widgets[$index][$i] = "{$name}-2";
$changed = true;
break 2;
}
}
}
}
if (is_admin() && $changed) {
update_option('sidebars_widgets', $sidebars_widgets);
}
}
$settings['_multiwidget'] = 1;
if (is_admin()) {
update_option($option_name, $settings);
}
return $settings;
}