如何删除所有不活动的小工具?

时间:2015-04-20 作者:Nilambar Sharma

我想清理所有不活动的小部件。我按照这个答案的建议尝试了以下代码片段Script to remove all inactive widgets?.

$sidebars_widgets = get_option( \'sidebars_widgets\' );
$sidebars_widgets[\'wp_inactive_widgets\'] = array();
update_option( \'sidebars_widgets\', $sidebars_widgets );
我还尝试删除选项sidebars_widgets 直接从选项表中选择。

但在刷新页面后,所有不活动的小部件都会恢复旧值。如何一次删除所有不活动的小部件?提前谢谢。

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

你应该用after_setup_theme 措施:

function remove_inactive_widgets() {
     $sidebars_widgets = get_option( \'sidebars_widgets\' );
     $sidebars_widgets[\'wp_inactive_widgets\'] = array();
     update_option( \'sidebars_widgets\', $sidebars_widgets );
}
add_action( \'after_setup_theme\', \'remove_inactive_widgets\' );

SO网友:Sergio Cabral

小部件自定义保存在小部件本身中。所以除了删除sidebars_widgets, 您还必须删除小部件中的自定义数据。

$sidebars_widgets = get_option(\'sidebars_widgets\');
foreach ($sidebars_widgets as $key => $value) {
    foreach ($value as $widget_id) {
        $pieces = explode(\'-\', $widget_id);
        $multi_number = array_pop($pieces);
        $id_base = implode(\'-\', $pieces);
        $widget = get_option(\'widget_\' . $id_base);

        //Here it deletes the widget customizations that are linked to an id
        unset($widget[$multi_number]);

        update_option(\'widget_\' . $id_base, $widget);
    }

    //Here it erases all the page\'s widget. Set ampty array.
    $sidebars_widgets[$key] = array();
}
update_option(\'sidebars_widgets\', $sidebars_widgets);

结束