如何删除WordPress小工具实例?

时间:2016-04-08 作者:Rony Mathew

我正在开发一个WordPress插件来插入广告。它还有一个小部件来显示广告。在我的主插件类中,我想检查一个条件,如果它满足,我想删除小部件的一个特定实例。

class Main_Plugin{
    if(//condition) {
         //delete widget instance
    }
}
怎么做??有没有可能或者我走错了方向?

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

小部件应该只由用户操作,通常不应该删除它们,因为它们没有版本控制。因此,我建议你在进一步阅读之前先重新思考一下。

小部件位于数据库中的两个位置sidebar_widgets 选项是一个边栏数组,由sidebar id. 每个侧栏由一组小部件标识符表示。

单个小部件设置位于名为widget_{widget name} 它是由小部件的小部件id索引的数组。

因此,要删除某些特定类型的小部件,您需要执行以下操作

$sidebars = get_option(\'sidebar_widgets\');
$widgets  = get_option(\'widget\'.your widget base name);
foreach ($sidebars as $sidebar_id => $sidebar) {
  foreach ($sidebar as $key=>$widget_id) {
    if ($widget_id match the name pattern of the widget type) {
      $widget = $widgets[$widget_id];
      if ($widget needs to be deleted)
        unset($widgets[$widget_id]);
        update_option(\'widget\'.your widget base name, $widgets);
        unset($sidebars[$sidebar_id][$key]);
        update_option(`sidebar_widgets\', $sidebars);
      }
    }
  }
}  
显然,您可以从在小部件的选项中定位小部件id开始,然后在侧栏上循环。

显然,这只是元代码,一些小细节可能需要调整,但请注意,这里的unset可能是以一种不太安全的方式完成的。