我一直在用我的插件测试新的3.3 RC1代码,我发现switch\\u theme()函数有一个显著的区别,它阻碍了我动态预设小部件的能力。
问题似乎是对全局$sidebars_小部件的调用。请注意,在以前的版本中,switch\\u theme()方法不涉及侧栏小部件。
有人知道这是为了什么吗?
我有一个插件,可以在安装新主题之前动态创建和插入小部件,并在插件激活期间调用switch\\u theme()。代码在3.2.1中运行良好,但在3.3 rc1中没有运行(边栏小部件是创建的,只是没有插入到边栏中)
下面是3.2.1中的代码
function switch_theme($template, $stylesheet) {
global $wp_theme_directories;
update_option(\'template\', $template);
update_option(\'stylesheet\', $stylesheet);
if ( count($wp_theme_directories) > 1 ) {
update_option(\'template_root\', get_raw_theme_root($template, true));
update_option(\'stylesheet_root\', get_raw_theme_root($stylesheet, true));
}
delete_option(\'current_theme\');
$theme = get_current_theme();
if ( is_admin() && false === get_option( "theme_mods_$stylesheet" ) ) {
$default_theme_mods = (array) get_option( "mods_$theme" );
add_option( "theme_mods_$stylesheet", $default_theme_mods );
}
do_action(\'switch_theme\', $theme);
}
下面是3.3 rc1的更新代码
function switch_theme($template, $stylesheet) {
global $wp_theme_directories, $sidebars_widgets;
if ( is_array( $sidebars_widgets ) )
set_theme_mod( \'sidebars_widgets\', array( \'time\' => time(), \'data\' => $sidebars_widgets ) );
$old_theme = get_current_theme();
update_option(\'template\', $template);
update_option(\'stylesheet\', $stylesheet);
if ( count($wp_theme_directories) > 1 ) {
update_option(\'template_root\', get_raw_theme_root($template, true));
update_option(\'stylesheet_root\', get_raw_theme_root($stylesheet, true));
}
delete_option(\'current_theme\');
$theme = get_current_theme();
if ( is_admin() && false === get_option( "theme_mods_$stylesheet" ) ) {
$default_theme_mods = (array) get_option( "mods_$theme" );
add_option( "theme_mods_$stylesheet", $default_theme_mods );
}
update_option( \'theme_switched\', $old_theme );
do_action( \'switch_theme\', $theme );
}