Функция пользовательского виджета в плагине не работает?
Я взял код прямо из одной из моих тем, которые я создал, и это список всех 50 состояний в неупорядоченном списке, упакованном в виджет, который вы можете просто перетащить на боковую панель.
Проблема в том, что когда я пытаюсь использовать этот код в файле плагина, я получаю следующую ошибку:
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
Спасибо.
2 answers
Попробуйте заменить:
register_widget('States_Widget');
С помощью:
add_action('widgets_init', 'register_states_widget');
function register_states_widget() {
register_widget('States_Widget');
}
Предположим, что вам нужно инициализировать виджет внутри метода класса, передав имя виджета в качестве аргумента. Для этого вы должны сделать следующее:
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
.