Situation: Ich arbeite an einem Plugin und entwickle es als Klasse. Alles hat gut funktioniert, bis ich auf diese Situation gestoßen bin. Ich wollte die Dinge ein bisschen sauberer machen und versuchte dies ..
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
Ich habe verschiedene Optionen ausprobiert, aber es funktioniert nichts. Vielleicht bin ich davor, aber ich kann es nicht sehen.
Natürlich ist dies eine Neuerstellung. Ich habe allen meinen Funktionen ein Präfix vorangestellt und sie sind nicht genau so, wie ich sie hier geschrieben habe, aber ich hoffe, Sie haben die Idee, nach der ich frage.
Danke im Voraus.
PD: Wenn Sie den Original-Quellcode sehen möchten, füge ich ihn gerne ein und gebe Ihnen den Link.
Sie könnten immer nur eine anonyme Funktion (oder Schließung) verwenden. Etwas zu den Auswirkungen von:
quelle
function() use ($my_var) { // now you can use $my_var }
Die Funktion load_view sollte so aussehen:
und in Ihrer Include-Datei sollte es jeglichen Inhalt für die angezeigte Seite wiedergeben.
BEARBEITEN:
Folgendes sagt der Kodex dazu:
$menu_slug (string) (required)
Der Slug-Name, mit dem auf dieses Menü verwiesen wird (sollte für dieses Menü eindeutig sein). Vor Version 3.0 wurde dies als Datei- (oder Handle-) Parameter bezeichnet. Wenn der Funktionsparameter weggelassen wird, sollte menu_slug die PHP-Datei sein, die die Anzeige des Inhalts der Menüseite übernimmt. Standardeinstellung: Keine$function
Die Funktion, die den Seiteninhalt für die Menüseite anzeigt. Technisch gesehen ist der Funktionsparameter optional, aber wenn er nicht angegeben wird, geht WordPress grundsätzlich davon aus, dass durch das Einbeziehen der PHP-Datei der Verwaltungsbildschirm generiert wird, ohne eine Funktion aufzurufen. Die meisten Plug-in-Autoren fügen den Code zur Seitenerstellung in eine Funktion in ihrer Haupt-Plug-in-Datei ein. Wenn der Funktionsparameter angegeben ist, kann für den Dateiparameter eine beliebige Zeichenfolge verwendet werden. Dies ermöglicht die Verwendung von Seiten wie? Page = my_super_plugin_page anstelle von? Page = my-super-plugin / admin-options.php.Was ich daraus entnehmen kann ist, dass, wenn Sie die Funktion leer lassen, versucht wird, eine PHP-Datei einzuschließen, die auf dem basiert, was Sie eingestellt haben
menu_slug
.BEARBEITEN 2
quelle
filename
Variable, so wird es immer sein"somethingelse"
. Ihre erste Änderung könnte hier der Trick sein: Wenn Sieload_view
nichts tun, außer die Datei einzuschließen, sollten Sie in der Tat keine Rückruffunktion übergeben, und WordPress wird versuchen, die Seite, die Sie übergeben haben, als Slug zu laden.Ich habe dieses Problem gelöst, indem ich einfach die ID (oder die Daten, die Sie benötigen) an den Menüpunkt angehängt habe.
Beispielsweise:
Dies erstellt dann eine URL mit 'my-plugin-settings-filename' (als Beispiel) und ich kann nur diesen Teil der URL analysieren (mit $ _GET oder filter_input).
quelle
Basierend auf der Antwort von user35752 können Sie sogar eine Objektmethode mit params als Rückruf verwenden.
quelle