默认小部件通常不会随主题一起激活。主题在侧栏模板文件中添加默认小部件。例如,看一下210侧边栏。php文件:
<?php
/**
* The Sidebar containing the primary and secondary widget areas.
*
* @package WordPress
* @subpackage Twenty_Ten
* @since Twenty Ten 1.0
*/
?>
<div id="primary" class="widget-area" role="complementary">
<ul class="xoxo">
<?php
/* When we call the dynamic_sidebar() function, it\'ll spit out
* the widgets for that widget area. If it instead returns false,
* then the sidebar simply doesn\'t exist, so we\'ll hard-code in
* some default sidebar stuff just in case.
*/
if ( ! dynamic_sidebar( \'primary-widget-area\' ) ) : ?>
<li id="search" class="widget-container widget_search">
<?php get_search_form(); ?>
</li>
<li id="archives" class="widget-container">
<h3 class="widget-title"><?php _e( \'Archives\', \'twentyten\' ); ?></h3>
<ul>
<?php wp_get_archives( \'type=monthly\' ); ?>
</ul>
</li>
<li id="meta" class="widget-container">
<h3 class="widget-title"><?php _e( \'Meta\', \'twentyten\' ); ?></h3>
<ul>
<?php wp_register(); ?>
<li><?php wp_loginout(); ?></li>
<?php wp_meta(); ?>
</ul>
</li>
<?php endif; // end primary widget area ?>
</ul>
</div><!-- #primary .widget-area -->
正如您所看到的,默认小部件(在本例中是:搜索、归档和元)是在
dynamic_sidebar
有条件检查此侧栏是否有用户设置的任何小部件。
因此,要回答您的问题,请确保侧栏文件中没有默认的小部件dynamic_sidebar()
条件检查。
Update:
我强烈反对删除以前使用过的主题的已配置和保存的小部件,并认为不应该这样做,但如果必须这样做,则可以捕获主题激活并触发一个简单的函数来清除保存的小部件,例如:
if ( is_admin() && isset($_GET[\'activated\'] ) && $pagenow == \'themes.php\' ) {
add_action(\'admin_footer\',\'removed_widgets\');
}
function removed_widgets(){
//get all registered sidebars
global $wp_registered_sidebars;
//get saved widgets
$widgets = get_option(\'sidebars_widgets\');
//loop over the sidebars and remove all widgets
foreach ($wp_registered_sidebars as $sidebar => $value) {
unset($widgets[$sidebar]);
}
//update with widgets removed
update_option(\'sidebars_widgets\',$widgets);
}