Você não pode passar um argumento para a função de retorno de chamada. add_menu_page()
o adiciona como um manipulador de ações e admin.php
dispara a ação , sem quaisquer argumentos.
Eu vejo duas soluções simples para esse problema. Uma é armazenar todo o nome do arquivo em uma matriz em sua classe, indexada pelo nome do gancho. Então você pode usar isso para procurar o arquivo que precisa carregar (você também pode armazenar dados adicionais nesta matriz).
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';
}
}
O outro é pular o argumento de callback, então o WordPress incluirá o arquivo indicado pelo próprio nome do slug, como Brady sugere em sua resposta.