I’d use a filter. You can remove this:
if (function_exists('bf_new_defaults')) {
return bf_new_defaults( $default_settings );
} else {
return $default_settings;
}
and replace it with something like this:
return apply_filters('bf_filter', $default_settings)
The following is a truncated, proof of concept version of the code so you can see how $default_settings
gets altered.
add_filter(
'bf_filter',
function($default_settings) {
var_dump($default_settings);
$default_settings[] = 4;
return $default_settings;
}
);
$default_settings = array(1, 2, 3);
var_dump(apply_filters('bf_filter', $default_settings));
Your filter has to be added before bf_set_defaults
runs so you may have trouble with the fact that plugins load before themes, but it depends on how (when) the function is used.