Sytuacja: Pracuję nad wtyczką i rozwijam ją jako klasę, wszystko działało dobrze, dopóki nie wpadłem w taką sytuację. Chciałem uczynić rzeczy nieco czystszymi i spróbowałem tego ...
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
Próbowałem wielu różnych opcji, ale nic nie działa, może jestem przed tym, ale nie widzę.
Oczywiście, że jest to ponowne tworzenie, mam przedrostek wszystkich moich funkcji i nie są one dokładnie takie, jak tutaj napisałem, ale mam nadzieję, że masz pomysł, o który proszę.
Z góry dziękuję.
PD: Jeśli chcesz zobaczyć oryginalny kod źródłowy, chętnie go wkleję i podam link.
Zawsze możesz po prostu użyć anonimowej funkcji (lub zamknięcia). Coś na wpływ:
źródło
function() use ($my_var) { // now you can use $my_var }
funkcja load_view powinna wyglądać tak:
a w twoim pliku dołączanym powinna odzwierciedlać każdą treść wyświetlanej strony.
EDYTOWAĆ:
Oto, co mówi kodeks w tej sprawie:
$menu_slug (string) (required)
Nazwa ślimaka, według której ma się odnosić do tego menu (powinna być unikalna dla tego menu). Przed wersją 3.0 było to nazywane parametrem file (lub handle). Jeśli parametr funkcji zostanie pominięty, menu_slug powinien być plikiem PHP, który obsługuje wyświetlanie zawartości strony menu. Domyślnie: brak$function
Funkcja wyświetlająca zawartość strony dla menu. Technicznie parametr funkcji jest opcjonalny, ale jeśli nie zostanie podany, WordPress zasadniczo założy, że dołączenie pliku PHP wygeneruje ekran administracyjny, bez wywoływania funkcji. Większość autorów wtyczek decyduje się na umieszczenie kodu generującego stronę w funkcji w głównym pliku wtyczki. W przypadku, gdy parametr funkcji jest określony, możliwe jest użycie dowolnego łańcucha dla parametru pliku. Pozwala to na użycie stron takich jak? Page = moja_super_plugin_page zamiast? Page = my-super-plugin / admin-options.php.Mogę więc wyciągnąć z tego, że jeśli pozostawisz funkcję pustą, spróbuje dołączyć plik php na podstawie tego, co ustawiłeś
menu_slug
.EDYCJA 2
źródło
filename
zmienną, więc zawsze będzie"somethingelse"
. Twoja pierwsza edycja może być tutaj sztuczką: jeśliload_view
nic nie robi oprócz włączenia pliku, rzeczywiście nie powinieneś przekazywać funkcji wywołania zwrotnego, a WordPress spróbuje załadować stronę, którą przekazałeś jako ślimak.Rozwiązałem ten problem, po prostu dodając identyfikator (lub dowolne dane, których potrzebujesz) do paska menu.
Na przykład:
Spowoduje to utworzenie adresu URL z „my-plugin-settings-filename” (jako przykład) i mogę po prostu przeanalizować tę część adresu URL (za pomocą $ _GET lub filter_input).
źródło
Na podstawie odpowiedzi user35752 możesz nawet użyć metody obiektowej z parametrami jako wywołaniem zwrotnym.
źródło