我正在尝试创建一种动态的方式来添加具有不同功能的管理页面和子菜单。
因此,我想到的第一种方法是将所有页面放在1文件夹中,并将其命名为0。管理\\u选项。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);
}
也许是过滤器或类似的东西?
提前感谢。
SO网友:Neta Meta
我最后做的是将页面数组设置为类变量,然后执行常规的添加添加菜单页面或添加子菜单页面。。而回调函数是相同的函数。
在回调函数中,我获取$\\u GET[\'page\',然后查看我放入类变量中的数组。。
请考虑该页的名称为:0。管理\\u选项。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);
}
我知道这不是一个干净的方法,但由于我没有找到任何其他解决方案,这就是我想到的。
希望能帮助别人。