How to remove traces from widget during uninstallation

I have a small plugin, which registers a custom widget and now I am wondering how to remove all traces of this widget when the plugin is removed through the administration.

If I look in the database after removal of the plugin, I can still see traces of the widget in the wp_options table:

+-----------+----------------------------+--------------------------------+----------+
| option_id | option_name                | option_value                   | autoload |
+-----------+----------------------------+--------------------------------+----------+
|       158 | widget_my_plugin_widget | a:1:{s:12:"_multiwidget";i:1;} | yes      |
+-----------+----------------------------+--------------------------------+----------+

+-----------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
| option_id | option_name      | option_value                                                                                                                                                                                                                                                                                                 | autoload |
+-----------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
|       102 | sidebars_widgets | a:5:{s:19:"wp_inactive_widgets";a:0:{}s:9:"sidebar-1";a:7:{i:0;s:8:"search-2";i:1;s:14:"recent-posts-2";i:2;s:17:"recent-comments-2";i:3;s:10:"archives-2";i:4;s:12:"categories-2";i:5;s:6:"meta-2";i:6;s:21:"my_plugin_widget-2";}s:9:"sidebar-2";a:0:{}s:9:"sidebar-3";a:0:{}s:13:"array_version";i:3;} | yes      |
+-----------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+

Is there some standard for removing all traces of a custom widget when the user removes a plugin?

I tried doing something like this, which seems to work, but was wondering if there is some better way or if it is needed at all:

// Delete any sidebar widgets.
$sidebars = get_option('sidebars_widgets');
foreach ($sidebars as $sidebar_id = $sidebar) {
  if (is_array($sidebar)) {
    foreach ($sidebar as $key = $widget_id) {
      if ($widget_id  strstr($widget_id, 'widget_my_plugin_widget')) {
        unset($sidebars[$sidebar_id][$key]);
      }
    }
  }
}

Topic uninstallation widgets options database plugins Wordpress

Category Web

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.