Добавить меню администратора Внутри Конструкции или инициализации


Я думал, что продвигаюсь в своем обучении разработке 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 настроек, пытаясь следовать этой серии. Итак, это один из важнейших моментов, чтобы заставить функционировать что-то такое простое, как пункт меню, прежде чем я смогу продолжить.

Author: clockwiseq, 2013-03-29

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 может помочь понять, как это работает.

 3
Author: fuxia, 2013-03-29 19:31:34