Creating a menu page in a Object Oriented developed plugin

I am trying for the first time to build a plugin for WordPress following OOP way.
I am having some problems while trying to create a submenu page using add_users_page() function.

Here is a simple version of my code :

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();

The problem is that I cannot see the html output in the display_test_page() function… although the submenu page was indeed created in the Users general menu.

Thank you in advance for your help,

1 Answer
1

You have mix up in static and non-static usage. Your style is non-static, but your methods are declared as such. If you enable WP_DEBUG mode you’ll see following errors:

Notice: Undefined variable: this

Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object

This happens because static method doesn’t “know” what $this refers to, since static isn’t tied to specific instance of the class.

Simply declare your methods as public rather than public static for this code organization.

Leave a Comment