Situation: je travaille sur un plugin et je le développe en classe, tout a bien fonctionné jusqu'à ce que je rencontre cette situation. Je voulais rendre les choses un peu plus propres et j'ai essayé ça ..
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
J'ai essayé un tas d'options différentes mais rien ne fonctionne, peut-être que je suis devant, mais je ne le vois pas.
Bien sûr, c'est une re-création, j'ai préfixé toutes mes fonctions et elles ne sont pas exactement comme je l'ai écrit ici mais j'espère que vous avez l'idée de demander.
Merci d'avance.
PD: Si vous voulez voir le code source original, je serai heureux de le coller et de vous donner le lien.
Vous pouvez toujours simplement utiliser une fonction anonyme (ou fermeture). Quelque chose qui affecte:
la source
function() use ($my_var) { // now you can use $my_var }
la fonction load_view devrait être comme ça?:
et dans votre fichier include, il devrait faire écho à tout contenu de la page affichée.
ÉDITER:
Voici ce que dit le codex à ce sujet:
$menu_slug (string) (required)
Le nom du slug pour faire référence à ce menu (devrait être unique pour ce menu). Avant la version 3.0, cela s'appelait le paramètre file (ou handle). Si le paramètre de fonction est omis, le menu_slug doit être le fichier PHP qui gère l'affichage du contenu de la page de menu. Par défaut: aucun$function
Fonction qui affiche le contenu de la page de la page de menu. Techniquement, le paramètre de la fonction est facultatif, mais s'il n'est pas fourni, WordPress supposera essentiellement que l'inclusion du fichier PHP générera l'écran d'administration, sans appeler de fonction. La plupart des auteurs de plugins choisissent de placer le code de génération de page dans une fonction dans leur fichier de plugin principal.: Dans le cas où le paramètre de fonction est spécifié, il est possible d'utiliser n'importe quelle chaîne pour le paramètre de fichier. Cela permet l'utilisation de pages telles que? Page = my_super_plugin_page au lieu de? Page = my-super-plugin / admin-options.php.Donc, ce que je peux en déduire, c'est que si vous laissez la fonction vide, elle essaie d'inclure un fichier php en fonction de ce que vous avez défini
menu_slug
.EDIT 2
la source
filename
variable pour qu'elle le soit toujours"somethingelse"
. Votre première modification pourrait être l'astuce ici: siload_view
ne fait rien sauf pour inclure le fichier, vous ne devez en effet pas passer une fonction de rappel et WordPress essaiera de charger la page que vous avez passée en tant que slug.J'ai résolu ce problème en ajoutant simplement l'ID (ou toutes les données dont vous avez besoin) au slug du menu.
Par exemple:
Cela créera ensuite une URL avec «my-plugin-settings-filename» (à titre d'exemple), et je peux simplement analyser cette partie de l'URL (avec $ _GET ou filter_input).
la source
Basé sur la réponse de user35752 , vous pouvez même utiliser une méthode objet avec des paramètres comme rappel.
la source