web-dev-qa-db-ja.com

オブジェクト指向開発プラグインでメニューを作成する

私はOOP wayに従ってWordpress用のプラグインを初めて構築しようとしています。 add_users_page()関数を使用してサブメニューページを作成しようとしている間、私はいくつかの問題を抱えています。

これが私のコードの単純版です。

class MyPlugin  {
    public function __construct()
    {
       add_action('admin_menu', array($this, 'create_menu'));
    }

    public static function create_menu()
    {
    add_users_page( 'My Plugin Menu', 'My Plugin Menu (Test)', 'list_users', 'mp_test_page', array($this, 'display_test_page'));
    }

    public static function display_test_page()
    {
    if ( !current_user_can( 'list_users' ) )  {
    wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
            }
    echo '<h2>Test page</h2>';
    echo '<p>The Problem : I cannot see that output in the corresponding submenu page</p>';
    }
}
new MyPlugin();

問題は、サブメニューページがユーザの一般メニューで作成されたにも関わらず、display_test_page()関数でHTML出力が表示されないことです。

ご協力ありがとうございます

2
user54952

あなたは静的と非静的の使い方を混同しています。あなたのスタイルは非静的ですが、あなたのメソッドはそのように宣言されています。 WP_DEBUGモード を有効にすると、以下のエラーが表示されます。

Notice:未定義の変数:this

警告:call_user_func_array()はパラメータ1が有効なコールバックであることを期待しています、最初の配列メンバは有効なクラス名またはオブジェクトではありません

Staticはクラスの特定のインスタンスに結び付けられていないので、staticメソッドは$thisが何を参照しているかを「知らない」ために起こります。

このコード構成では、メソッドを単にpublic staticではなくpublicとして宣言してください。

1
Rarst