有没有办法将参数传递给ADD_MENU_PAGE函数?

时间:2013-11-04 作者:Neta Meta

我正在尝试创建一种动态的方式来添加具有不同功能的管理页面和子菜单。

因此,我想到的第一种方法是将所有页面放在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_pageadd_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);
}
也许是过滤器或类似的东西?

提前感谢。

1 个回复
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);
}
我知道这不是一个干净的方法,但由于我没有找到任何其他解决方案,这就是我想到的。

希望能帮助别人。

结束

相关推荐

Plugins_url函数混合了系统路径和URL

在我的WordPress小部件中,我使用以下代码:wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ ))); 不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/