WP 3.3 RC1新的Switch_Theme()方法页签侧边栏

时间:2011-12-06 作者:Scott B

我一直在用我的插件测试新的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 );
}

1 个回复
最合适的回答,由SO网友:Otto 整理而成

可能您的代码在某种程度上破坏了新的小部件处理方法,这些方法在发生主题切换时会保存旧的小部件布局。

http://wordpress.org/news/2011/11/wherefore-art-thou-widgets/

最有可能的情况是,您必须在调整其中的小部件之前切换主题,因为小部件不再存在于主题切换中,或者至少在主题切换后将从旧设置中恢复。

结束

相关推荐

Why use widgets?

我对使用WordPress很陌生,我想知道使用小部件的好处是什么?看here 这听起来像是为那些不是程序员的人准备的,他们想在他们的网站上添加插件。对吗?或者小部件是否在某种程度上使站点更加健壮?