Добавить меню администратора Внутри Конструкции или инициализации
Я думал, что продвигаюсь в своем обучении разработке WordPress, пока не наткнулся на шаблон для плагинов WordPress, в котором используется объект класса. Меня это устраивает, и я понимаю эти концепции, и я.Сетевой разработчик. Но по какой-то причине я не могу заставить какой-либо обратный вызов функционировать должным образом. Все, что мне нужно на данный момент, - это меню администратора, и когда вы нажимаете на этот пункт меню, он отображает что-то вроде "ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ!!!". Проверьте, что у меня есть ниже, и можете кто-нибудь, пожалуйста, объясните, что у меня не так?
class school_manager {
function __construct() {
add_action( 'init', array( $this, 'init' ) );
}
public function init(){
add_action('admin_menu', array(&$this, 'add_admin_menu'));
}
public function add_admin_menu(){
add_menu_page( 'School Manager Settings', 'School Manager', 'administrator', 'school-manager-settings', 'show_admin_settings_page', null );
}
public function show_admin_settings_page(){
echo '<p>This is a test for the admin settings page. Please work!</p>';
}
}
Мой новый пункт меню действительно появляется (как это было, когда я не использовал объект класса в своей архитектуре плагина. Но, когда я нажимаю на пункт меню, я получаю следующую ошибку:
Предупреждение: call_user_func_array() [функция.вызов-пользователь-функция-массив]: Ожидается, что первый аргумент будет допустимым обратным вызовом, "school_manager::create_admin_page" был указан в H:\root\home\xxxxx\wp-includes\plugin.php в строке 406
Я пытаюсь чтобы создать плагин, который имеет не только меню администратора и пункты подменю, но также хочет использовать API настроек, пытаясь следовать этой серии. Итак, это один из важнейших моментов, чтобы заставить функционировать что-то такое простое, как пункт меню, прежде чем я смогу продолжить.
1 answers
Обратный вызов, который вы указали в add_menu_page()
, является статической функцией, а не методом класса. Это должно быть:
add_menu_page(
'School Manager Settings',
'School Manager',
'administrator',
'school-manager-settings',
array ( $this, 'show_admin_settings_page' )
);
И, пожалуйста, больше не используйте &$this
, это PHP 4.:)
Мой демонстрационный плагин Демонстрационное меню администратора T5 может помочь понять, как это работает.