Intereting Posts
В архиве тегов – количество просмотров сообщений для каждой категории, к которой они принадлежат. Почему WYSIWYG не поддерживает теги H1-H6? Получить post_content с тегами <p>? Как добавить класс публикации на каждый пост. (на главной странице) Теги шаблонов для Buddypress Как установить правило ширины и высоты для показанного изображения Есть ли способ иметь администраторов, которые вошли в систему WordPress, чтобы не вводить пароль для защищенных паролем страниц во время просмотра веб-сайта? Отображение месяца на английском языке, но требуется на шведском языке? Возможно ли использовать различные шаблоны продуктов для определенной категории в WooCommerce? Просмотр комментариев / оценок (в целом) на странице в виде сетки (кладки) WP Cron «неполный», чтобы вставлять сообщения Добавить категорию Ajax не обновляет пользовательский стол таблицы списков Сообщения облака – Кто-нибудь? подменю не отображается в адаптивном плагине Как отобразить список, показывающий пользовательские типы сообщений, вложенные в таксономию?

есть ли способ передать параметр функции add_menu_page?

Я пытаюсь создать динамический способ добавления страниц администратора и подменю с различными возможностями.

Итак, первый способ, который я думал о том, что работает BTW, но уродлив, имеет все страницы в 1 папке и называет их чем-то вроде 0.manage_options.pagename.php

Затем получите все страницы и просто запустите массив и используйте explode() для имени

вот так:

 $classLib = glob(SERVICES.'/*.php'); $pagesArray = array(); $mainMenu = ''; foreach($classLib as $className) { $tempPages = explode('.',str_replace('.php', '', basename($className))); /* a function to get nice clean name */ $menu_title = $this->get_admin_menu_clear_name($tempPages['2']); $pagesArrayTemp[$tempPages[0]] = array( 'page_title' => $tempPages['2'], 'menu_title' => $menu_title, 'capability' => $tempPages['1'], 'menu_slug' => $tempPages['2'], 'url' => 'pluginame/services/'.basename($className), ); } $pagesArray = array(); foreach($pagesArrayTemp as $tempPage){ $pagesArray[] = $tempPage; } add_menu_page('pluginame', 'Main', $pagesArray[0]['capability'], $pagesArray[0]['url']); foreach($pagesArray as $page){ add_submenu_page('pluginame', $page['page_title'], $page['menu_title'], $page['capability'], $page['url']); } 

это работает, однако URI страницы смехотворно уродливый.

Поэтому я пытаюсь найти альтернативный путь. без создания функции для каждой страницы ….

есть ли способ передать параметр add_menu_page или add_submenu_page ?

как:

 add_submenu_page('something', 'something', 'something' , 'manage_options', 'something', array($this, 'option')); function option($premission, $pageURL){ if ( !current_user_can( $premission ) ) { wp_die( __( 'You do not have sufficient permissions to access this page.' ) ); } require_once($pageURL); } 

может быть, фильтр или что-то подобное?

Заранее спасибо.

Solutions Collecting From Web of "есть ли способ передать параметр функции add_menu_page?"

То, что я закончил, – это установить массив страниц как переменную класса, а затем сделать обычную add_menu_page или add_submenu_page .., тогда как функция обратного вызова является той же функцией.

в функции обратного вызова я беру $ _GET ['page'], а затем заглядываю в массив, который я помещаю внутри переменной класса.

считайте, что имя этой страницы: 0.manage_options.pagename.php

вот так:

 $classLib = glob(SERVICES.'/*.php'); $pagesArray = array(); $mainMenu = ''; foreach($classLib as $className) { $tempPages = explode('.',str_replace('.php', '', basename($className))); $menu_title = $this->wp_utils->get_admin_menu_clear_name($tempPages['2']); $pagesArrayTemp[$tempPages[0]] = array( 'page_title' => $tempPages['2'], 'menu_title' => $menu_title, 'capability' => $tempPages['1'], 'menu_slug' => $tempPages['2'], 'name' => basename($className), ); } $pagesArray = array(); foreach($pagesArrayTemp as $tempPage){ $pagesArray[] = $tempPage; } $this->pages = $pagesArray; add_menu_page(PLUGIN_NAME, PLUGIN_NAME, $pagesArray[0]['capability'], $pagesArray[0]['menu_slug'], array($this, 'menu_pages')); foreach($pagesArray as $page){ add_submenu_page($pagesArray[0]['menu_slug'], $page['page_title'], $page['menu_title'], $page['capability'], $page['menu_slug'], array($this, 'menu_pages')); } protected function menu_pages() { foreach($this->pages as $page){ if($page['menu_slug'] == $_GET['page']){ $capability = $page['capability']; $pageName = $page['name']; } } if ( empty($capability) || !current_user_can( $capability ) ) { wp_die( __( 'You do not have sufficient permissions to access this page.' ) ); } require_once(dirname(__FILE__).'/services/'.$pageName); } 

Я знаю, что это не чистый путь, но поскольку я не нашел другого решения, это то, к чему я пришел.

Надежды, которые помогают кому-то.