Custom Widget function in Plugin not working?

I took a code straight out of one of my themes I created, and it’s a list of all 50 states in an unordered list packed into a widget you can just drag and drop on the sidebar.

The problem is, when I try using this code in a PLUGIN file, I get the following error:

Read More

Fatal error: Call to a member function register() on a non-object in C:xampphtdocswordpresswp-includeswidgets.php on line 431

Why would it work in the theme, but not in the plugin? By the way, the active theme is NOT the theme I took the code out of.

Here’s my code: http://pastebin.com/ZeRWW3yb

Thanks.

Related posts

Leave a Reply

2 comments

  1. try replacing :

    register_widget('States_Widget');
    

    with:

    add_action('widgets_init', 'register_states_widget');
    function register_states_widget() {
        register_widget('States_Widget');
    }
    
  2. Let us assume that you need to initialize a widget inside a class method by passing the widget name as an argument. To accomplish this you would do this:

    class WidgetMonster {
        /**
         * Register widget via PHP lambda function as an argument to the add_action function
         * @var $widget_name string | WP_Widget.
         */
        public static function register_widget_helper( $widget_name ) {
            add_action('widgets_init',
                function() use ( &$widget_name ) {
                    return register_widget( $widget_name );
                }
            );
        }
    }
    

    Note that we need to pass the variable $widget_name name to our lambda function in order to use it. The part doing this is use (&$widget_name). As already noted hooks initialized like this cannot be removed by remove_action.