Passing arguments to a admin menu page callback?

You can’t pass an argument to the callback function. add_menu_page() adds it as an action handler, and admin.php fires the action, without any arguments.

I see two simple solutions to this problem. One is to store all filename in an array in your class, indexed by hook name. Then you can use this to look up what file you need to load (you can also store additional data in this array).

class WPSE16415_Plugin
{
    protected $views = array();

    function load_view() {
        // current_filter() also returns the current action
        $current_views = $this->views[current_filter()];
        include(dirname(__FILE__).'/views/'.$current_views.'.php');
    }

    function myplugin_create_menus() {
        $view_hook_name = add_menu_page( 'Plugin name',
            'Plugin name',
            'manage_options',
            'my-plugin-settings',
            array(&$this, 'load_view'),
        );
        $this->views[$view_hook_name] = 'options';
    }
}

The other is to skip the callback argument, so WordPress will include the file indicated by the slug name itself, as Brady suggests in his answer.

Leave a Comment