Situação: estou trabalhando em um plug-in e desenvolvendo-o como uma classe, tudo funcionou bem até eu me deparar com essa situação. Eu queria tornar as coisas um pouco mais limpas e tentei isso ..
class MyPlugin {
function __construct() {
add_action('admin_menu', array(&$this, 'myplugin_create_menus');
}
//I don't want to write a function for every options page I create
//so I prefer to just load the content from an external file.
function load_view($filename) {
$view = require(dirname(__FILE__).'/views/'.$filename.'.php');
return $view;
}
//Here is where the problem comes
function myplugin_create_menus() {
add_menu_page( 'Plugin name',
'Plugin name',
'manage_options',
'my-plugin-settings',
array(&$this, 'load_view') // Where do I specify the value of $filename??
);
}
}#end of class
Eu tentei várias opções diferentes, mas nada funciona, talvez eu esteja na frente, mas não consigo vê-lo.
É claro que isso é uma recriação, prefixei todas as minhas funções e elas não são exatamente como eu escrevi aqui, mas espero que você tenha a idéia de que estou pedindo.
Desde já, obrigado.
PD: Se você quiser ver o código fonte original, ficarei feliz em colá-lo e fornecer o link.
Você sempre pode usar apenas uma função anônima (ou fechamento). Algo que afeta:
fonte
function() use ($my_var) { // now you can use $my_var }
a função load_view deve ser assim ?:
e no seu arquivo de inclusão, ele deve ecoar qualquer conteúdo da página que está sendo exibida.
EDITAR:
Aqui está o que o códice diz sobre o assunto:
$menu_slug (string) (required)
O nome do slug ao qual se referir a este menu (deve ser exclusivo para este menu). Antes da versão 3.0, isso era chamado de parâmetro file (ou handle). Se o parâmetro de função for omitido, o menu_slug deve ser o arquivo PHP que lida com a exibição do conteúdo da página de menu. Padrão: Nenhum$function
A função que exibe o conteúdo da página para a página do menu. Tecnicamente, o parâmetro function é opcional, mas se não for fornecido, o WordPress basicamente assumirá que a inclusão do arquivo PHP irá gerar a tela de administração, sem chamar uma função. A maioria dos autores de plug-ins opta por inserir o código de geração de página em uma função em seu arquivo principal de plug-in :: No caso de o parâmetro function ser especificado, é possível usar qualquer string para o parâmetro file. Isso permite o uso de páginas como? Page = my_super_plugin_page em vez de? Page = my-super-plugin / admin-options.php.Então, o que posso deduzir disso é que, se você deixar a função vazia, ela tenta incluir um arquivo php com base no que você definiu
menu_slug
.EDIT 2
fonte
filename
variável para que sempre seja"somethingelse"
. Sua primeira edição pode ser o truque aqui: seload_view
não fizer nada, exceto incluir o arquivo, você realmente não deve passar uma função de retorno de chamada e o WordPress tentará carregar a página que você passou como lesma.Resolvi esse problema anexando apenas o ID (ou quaisquer dados necessários) à lesma do menu.
Por exemplo:
Isso criará uma URL com 'my-plugin-settings-filename' (como exemplo), e eu posso apenas analisar essa parte da URL (com $ _GET ou filter_input).
fonte
Com base na resposta do usuário35752 , você pode até usar um método de objeto com parâmetros como retorno de chamada.
fonte