Ситуация: я работаю над плагином и разрабатываю его как класс, все работало нормально, пока я не столкнулся с этой ситуацией. Я хотел сделать вещи немного чище и попробовал это ..
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
Я пробовал кучу разных вариантов, но ничего не работает, может быть, я перед этим, но я не вижу его.
Конечно, это воссоздание, я поставил перед всеми своими функциями префиксы, и они не совсем такие, как я написал здесь, но я надеюсь, что вы поняли, о чем я прошу.
Заранее спасибо.
PD: Если вы хотите увидеть оригинальный исходный код, я буду рад вставить его и дать ссылку.
Вы всегда можете просто использовать анонимную функцию (или замыкание). Что-то на аффект:
источник
function() use ($my_var) { // now you can use $my_var }
функция load_view должна быть такой?
и в вашем включаемом файле он должен отображать любой контент для отображаемой страницы.
РЕДАКТИРОВАТЬ:
Вот что говорит Кодекс по этому вопросу:
$menu_slug (string) (required)
Имя пули для ссылки на это меню (должно быть уникальным для этого меню). До версии 3.0 это называлось параметром файла (или дескриптора). Если параметр функции пропущен, menu_slug должен быть PHP-файлом, который обрабатывает отображение содержимого страницы меню. По умолчанию: нет$function
Функция, которая отображает содержимое страницы для страницы меню. Технически, параметр функции является необязательным, но если он не предоставлен, WordPress в основном будет предполагать, что включение файла PHP создаст экран администрирования без вызова функции. Большинство авторов плагинов предпочитают помещать генерирующий страницу код в функцию в свой основной файл плагина. В случае, если указан параметр функции, можно использовать любую строку для параметра файла. Это позволяет использовать такие страницы, как? Page = my_super_plugin_page вместо? Page = my-super-plugin / admin-options.php.Итак, из этого я могу сделать вывод, что если вы оставите функцию пустой, она попытается включить php-файл, основываясь на том, что вы установили
menu_slug
для.РЕДАКТИРОВАТЬ 2
источник
filename
переменную, чтобы она всегда была"somethingelse"
. Ваше первое редактирование может быть уловкой: еслиload_view
ничего не делает, кроме включения файла, вы действительно не должны передавать функцию обратного вызова, и WordPress попытается загрузить страницу, которую вы передали в качестве слаг.Я решил эту проблему, просто добавив идентификатор (или любые другие данные, которые вам нужны) в слаг меню.
Например:
Затем будет создан URL-адрес с именем «my-plugin-settings-filename» (в качестве примера), и я могу просто проанализировать эту часть URL-адреса (с помощью $ _GET или filter_input).
источник
На основе ответе пользователя 35752 , вы даже можете использовать объектный метод с параметрами в качестве обратного вызова.
источник