Situación: estoy trabajando en un complemento y lo estoy desarrollando como una clase, todo funcionó bien hasta que me encontré con esta situación. Quería hacer las cosas un poco más limpias y probé esto ...
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
He probado un montón de opciones diferentes, pero nada funciona, tal vez estoy frente a él, pero no puedo verlo.
Por supuesto, esta es una recreación, he prefijado todas mis funciones y no son exactamente como las escribí aquí, pero espero que sepas la idea que estoy pidiendo.
Gracias por adelantado.
PD: Si desea ver el código fuente original, me complacerá pegarlo y darle el enlace.
Siempre puede usar una función anónima (o cierre). Algo que afecta a:
fuente
function() use ($my_var) { // now you can use $my_var }
¿La función load_view debería ser así ?:
y en su archivo de inclusión debe hacer eco de cualquier contenido para la página que se muestra.
EDITAR:
Esto es lo que dice el códice al respecto:
$menu_slug (string) (required)
El nombre del slug para referirse a este menú (debe ser único para este menú). Antes de la Versión 3.0, esto se llamaba parámetro de archivo (o identificador). Si se omite el parámetro de función, menu_slug debe ser el archivo PHP que maneja la visualización del contenido de la página del menú. Predeterminado: Ninguno$function
La función que muestra el contenido de la página para la página del menú. Técnicamente, el parámetro de función es opcional, pero si no se proporciona, WordPress básicamente asumirá que incluir el archivo PHP generará la pantalla de administración, sin llamar a una función. La mayoría de los autores de complementos eligen colocar el código de generación de páginas en una función dentro de su archivo principal de complementos: en el caso de que se especifique el parámetro de función, es posible usar cualquier cadena para el parámetro de archivo. Esto permite el uso de páginas como? Page = my_super_plugin_page en lugar de? Page = my-super-plugin / admin-options.php.Entonces, lo que puedo deducir de esto es que si deja la función vacía, intenta incluir un archivo php basado en lo que ha configurado
menu_slug
.EDITAR 2
fuente
filename
variable para que siempre lo sea"somethingelse"
. Su primera edición podría ser el truco aquí: siload_view
no hace nada excepto incluir el archivo, no debería pasar una función de devolución de llamada y WordPress intentará cargar la página que pasó como la babosa.Resolví este problema simplemente agregando la ID (o cualquier información que necesite) a la babosa del menú.
Por ejemplo:
Esto creará una URL con 'my-plugin-settings-filename' (como ejemplo), y puedo analizar esa parte de la URL (con $ _GET o filter_input).
fuente
Según la respuesta del usuario 35752 , incluso puede usar un método de objeto con parámetros como devolución de llamada.
fuente