Intereting Posts
Локализовать строки для перевода Как установить домашнюю страницу плагина Как добавить изображение в rss? Удаление полей с страницы профиля темы My Login Plugin где находится информация о постоянной медиа информации, хранящаяся в базе данных? Использование переменных shortcode с помощью wp_localize_script Данные не сохранены. Проблема с запросом на новый настраиваемый тип сообщения при хорошем отображении старого дисплея Зачем использовать JSON API для отображения последних сообщений? Использование catch_that_image () для галерей? Как использовать index.php в качестве шаблона для архивов? Пользовательский WP_Query нарушает поведение по умолчанию для просмотра правильного сообщения, связанного с налоговым сроком! Почему я выбираю таймер при использовании редактора меню? Проблема с разбивкой по страницам в WordPress / paged Как отправить документацию с помощью плагина

Передача аргументов в обратный вызов страницы меню администратора?

Ситуация: я работаю над плагином, и я разрабатываю его как класс, все работает нормально, пока я не столкнулся с этой ситуацией. Я хотел сделать вещи чище и попробовал это.

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: Если вы хотите увидеть исходный код, я буду рад вставить его и дать вам ссылку.

Solutions Collecting From Web of "Передача аргументов в обратный вызов страницы меню администратора?"

Вы не можете передать аргумент функции обратного вызова. add_menu_page() добавляет его как обработчик действий , а admin.php запускает действие без каких-либо аргументов.

Я вижу два простых решения этой проблемы. Один из них – сохранить все имена файлов в массиве вашего класса, индексированные по имени крюка. Затем вы можете использовать это, чтобы посмотреть, какой файл вам нужно загрузить (вы также можете хранить дополнительные данные в этом массиве).

 class WPSE16415_Plugin { protected $views = array(); function load_view() { // current_filter() also returns the current action $current_views = $this->views[current_filter()]; include(dirname(__FILE__).'/views/'.$current_views.'.php'); } function myplugin_create_menus() { $view_hook_name = add_menu_page( 'Plugin name', 'Plugin name', 'manage_options', 'my-plugin-settings', array(&$this, 'load_view'), ); $this->views[$view_hook_name] = 'options'; } } 

Другой – пропустить аргумент обратного вызова, поэтому WordPress будет включать файл, указанный самим именем slug, как предлагает Брэди в своем ответе.

Вы всегда можете использовать анонимную функцию (или закрытие). Что-то к влиянию:

 add_menu_page( $page, $menu, $capability, $slug, function() { print_my_admin_page($with_args); }, $icon, $position); 

функция load_view должна быть такой:

 function load_view($filename) { include(dirname(__FILE__).'/views/'.$filename.'.php'); } 

и в вашем файле include он должен отображать все содержимое отображаемой страницы.

РЕДАКТИРОВАТЬ:

Вот что говорит код по этому поводу:

$menu_slug (string) (required) Имя slug для ссылки на это меню (должно быть уникальным для этого меню). До версии 3.0 это называлось параметром file (или handle). Если параметр функции опущен, menu_slug должен быть файлом PHP, который обрабатывает отображение содержимого страницы меню. По умолчанию: нет

$function Функция, отображающая содержимое страницы для страницы меню. Технически параметр функции является необязательным, но если он не указан, то WordPress будет в основном предполагать, что в том числе PHP-файл будет генерировать экран администрирования без вызова функции. Большинство авторов плагинов ставят код генерации страницы в функцию в своем основном файле плагина. В том случае, если указан параметр функции, можно использовать любую строку для параметра файла. Это позволяет использовать страницы, такие как? Page = my_super_plugin_page вместо? Page = my-super-plugin / admin-options.php.

Поэтому я могу понять, что если вы оставите функцию пустой, она попытается включить php-файл на основе того, на что вы установили menu_slug .

EDIT 2

 function load_view() { include(dirname(__FILE__).'/views/'.$this->filename.'.php'); } function myplugin_create_menus() { $this->filename = "something"; add_menu_page( 'Plugin name', 'Plugin name', 'manage_options', 'my-plugin-settings', array(&$this, 'load_view') ); $this->filename = "somethingelse"; add_menu_page( 'Plugin name', 'Plugin name', 'manage_options', 'my-plugin-settings', array(&$this, 'load_view') ); } 

Я решил эту проблему, просто добавив идентификатор (или любые данные, которые вам нужны) в пул меню.

Например:

  add_menu_page( 'Plugin name', 'Plugin name', 'manage_options', 'my-plugin-settings-' . $identifier, 'setting-function-callback' ); 

Затем это создаст URL-адрес с «my-plugin-settings-filename» (как пример), и я могу просто проанализировать эту часть URL-адреса (с помощью $ _GET или filter_input).