web-dev-qa-db-ja.com

コンストラクトまたはInit内に管理メニューを追加する

私はWordPressプラグインの定型文に遭遇し、それがクラスオブジェクトを使用するまで、私は私のWordPress開発教育で前進していると思いました。私はそれで元気で、それらの概念を理解しています、そして私は.NET開発者です。しかし、何らかの理由で、コールバックを正しく機能させることができません。この時点で私が欲しいのは管理者メニューだけです、そしてあなたがそのメニュー項目をクリックするとき、それは「助けてください!!!」のような何かを表示します。私が以下に持っているものをチェックしてください、そして誰もが私が間違っていることを説明してもらえますか?

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()[function.call-user-func-array]:最初の引数は有効なコールバックであることが期待されています、 'school_manager :: create_admin_page'はH:\ root\home\xxxxx\wp-includes\pluginに与えられています406行目の.php

管理メニューやサブメニュー項目だけでなく、設定APIを利用して このシリーズ に従うようにしたいプラグインを作成しようとしています。だから、これは私が続けることができる前に機能するメニュー項目と同じくらい単純な何かを得るために重要なポイントの1つです。

2
clockwiseq

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 Admin Menu Demo はそれがどのように機能するかを理解するのを助けるかもしれません。

3
fuxia