/**
  * add module tab menu
  * @param $module
  * @param $menu
  */
 public static function add_feature_tab_submenu_page($feature, $menu)
 {
     //valid
     if (!HW_AWC_WidgetFeatures::get_features_data($feature)) {
         return;
     }
     //module not found
     if (!isset(self::$menus[$feature]['features_tab_menus'])) {
         self::$menus[$feature]['features_tab_menus'] = array();
     }
     if (!isset(self::$menus[$feature]['features_tab_menus'][$feature])) {
         self::$menus[$feature]['features_tab_menus'][$feature] = $menu;
     }
 }
 /**
  * custom widget callback
  */
 public function _hw_custom_widget_callback_function()
 {
     global $wp_registered_widgets;
     $original_callback_params = func_get_args();
     $widget_id = $original_callback_params[0]['widget_id'];
     $widget_obj = $wp_registered_widgets[$widget_id];
     $original_callback = $widget_obj['original_callback'];
     $wp_registered_widgets[$widget_id]['callback'] = $original_callback;
     //widget object
     $widget = $widget_obj['original_callback'][0];
     $widget_opt = get_option($widget_obj['original_callback'][0]->option_name);
     $widget_num = $widget_obj['params'][0]['number'];
     $instance = $widget_opt[$widget_num];
     //get current widget instance
     $widget_id_base = $wp_registered_widgets[$widget_id]['callback'][0]->id_base;
     //do widget features
     #$features = array('fixed_widget');
     /*$feature = HW_AWC::get_widget_feature($widget, 'fancybox');
       if($feature && HW_AWC::check_widget_feature($widget, 'fancybox') && $feature->is_active($instance) ) {
           if(method_exists($feature, 'do_widget_feature_frontend')) {
               $feature->do_widget_feature_frontend($widget, $instance);
           }
       }*/
     $all_features = HW_AWC_WidgetFeatures::get_all_features();
     $widgets_fields = HW_AWC_WidgetFeatures::get_features_data();
     foreach ($all_features as $name => $text) {
         if (isset($widgets_fields[$name]) && is_array($widgets_fields[$name])) {
             foreach ($widgets_fields[$name] as $widg) {
                 if ($widget == $widg['widget'] || $widg['widget']->id_base == $widget->id_base && $widg['widget']->number == $widget->number) {
                     $feature = $widg['class'];
                     $active = true;
                     if (method_exists($feature, 'is_active')) {
                         //check active widget feature
                         $active = $feature->is_active($instance);
                     }
                     if ($active && method_exists($feature, 'do_widget_feature_frontend')) {
                         $feature->do_widget_feature_frontend($widget, $instance);
                     }
                 }
             }
         }
     }
     if (is_callable($original_callback)) {
         ob_start();
         call_user_func_array($original_callback, $original_callback_params);
         $widget_output = ob_get_clean();
         echo apply_filters('hw_widget_output', $widget_output, $widget_id_base, $widget_id);
     }
 }