Функция пользовательского виджета в плагине не работает?

15

Я взял код прямо из одной из созданных мной тем, и это список всех 50 состояний в неупорядоченном списке, упакованном в виджет, который можно просто перетащить на боковую панель.

Проблема в том, что когда я пытаюсь использовать этот код в файле PLUGIN, я получаю следующую ошибку:

Fatal error: Call to a member function register() on a non-object in C:\xampp\htdocs\wordpress\wp-includes\widgets.php on line 431

Почему это работает в теме, а не в плагине? Кстати, активная тема - это НЕ тема, из которой я вынул код.

Вот мой код: http://pastebin.com/ZeRWW3yb

Благодарю.

Джаред
источник

Ответы:

15

попробуйте заменить:

register_widget('States_Widget');

с:

add_action('widgets_init', 'register_states_widget');
function register_states_widget() {
    register_widget('States_Widget');
}
Bainternet
источник
Рад, что я мог помочь
Bainternet
2
Одна строка: add_action ('widgets_init', create_function ('', 'return register_widget ("States_Widget");'));
Захари Шуесслер
3
Эти однострочники имеют серьезный недостаток: если пользователи хотят выполнить команду remove_action, они не могут этого сделать, потому что нет функции, которая может быть удалена.
Эллиот
1

Допустим, вам нужно инициализировать виджет внутри метода класса, передав имя виджета в качестве аргумента. Для этого вам нужно сделать следующее:

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 );
            }
        );
    }
}

Обратите внимание, что нам нужно передать $widget_nameимя переменной в нашу лямбда-функцию, чтобы использовать ее. Часть, которая делает это use (&$widget_name). Как уже отмечалось, такие инициализированные хуки не могут быть удалены remove_action.

toni_lehtimaki
источник