2

我在我的 WordPress 后端添加了一个菜单页面,其中包含一些子菜单项。我使用的代码片段是:

// Add to admin_menu function
add_menu_page(__('New Menu'), __('New Menu Title'), 'edit_themes', 'new_menu_item', 'functiontocallonclick', '', 3.5);
// Add to secondlevel menu
add_submenu_page('new_menu_item', __('New |Sub Menu item'), __('New Menu Title item'), 'edit_themes', 'new_menu_sub_item', 'subfunctiontocallonclick',');

正如您在上面看到的,当您转到后端的 New 菜单项时,它正在调用函数 functiontocallonclick。

我现在想知道的是:我想用函数传递一个变量。

functiontocallonclick($value);

当然不能那样做,那有什么好的方法呢?

我用这个:

switch($_GET['page']){
    case 'suppliers': $type='c';
        break;
    case 'contractors': $type='s';
        break;
    default: $type='';
        break;
}

但我试图找到一些更好的解决方案。

4

2 回答 2

0

这个答案可能看起来迟了,但我会分享我是如何解决这个问题的,因为看起来很多人正在寻找这个问题的答案。

我的答案是将变量传递给基于类的上下文中的嵌套函数,因此如果您使用的是函数式编程,那么请忽略 $this.


主要钩子动作:

function mainSetup(){
   add_action('admin_menu', array($this, 'mainMenuSetup'));
   add_action('admin_menu', array($this, 'subMenuSetup'));
}

菜单设置:

function mainMenuSetup(){
        add_menu_page('DashBoard',
                    'DashBoard',
                    'manage_options',
                    '[yoursitesname]-admin-menu',
                    function(){ $this->pageSelect("admin"); },
                    '',
                    200
                    );  
}

在主菜单导航选项的示例中,我们在嵌套函数中传递了一个字符串,该字符串将作为参数传递给方法(函数)“pageSelect”,但该字符串是硬编码的,不能轻易更改。我们将在设置子菜单时解决这个问题。

TODO:您应该替换 [yoursitename]。


子菜单设置:

对于子菜单,假设我们希望更轻松地返回并添加新的子菜单并更改谁可以访问哪些子菜单。为此,我将创建一个名为“subMenuObjects”的关联数组,其中数组的键是子菜单对象,它们的值是页面的权限。

function subMenuSetup(){

    $subMenuObjects = array(
                    'Settings' => 'manage_options',
                    'Services' => 'manage_options'
    );


    foreach ($subMenuObjects as $subMenu => $value) {

        add_submenu_page('[yoursitesname]-admin-menu',
            $subMenu . 'Page',
            $subMenu,
            $value, 
            '[yoursitesname]' . strtolower($subMenu) . '-menu', 
            function() use ($subMenu){ $this->pageSelect($subMenu); }
        );
    }
}

在这里,我们使用 'use' 将 $subMenu 传递给嵌套函数。


页面选择:

function pageSelect($page){
    
        switch ($page) {
            case 'admin':
                echo '<div>Welcome to the Admin page</div>';
                break;
            case 'Settings':
                echo '<div>Welcome to the Settings page</div>';
                break;
            case 'Services':
                echo '<div>Welcome to the Service page</div>';
                break;
            
            default:
                echo '<div>something happened, contact dev</div>';
                break;
        }

}
于 2021-05-26T20:03:34.523 回答
-1

是的,你这样做的方式就是 WordPress 自己的方式。要重用管理屏幕,您必须在 URL 中传递一些查询变量,然后根据该变量显示/隐藏元素。

您还可以创建不可见的管理屏幕:如何在 WordPress 自定义插件中启用附加页面?. 这也可能有用:Redirect from add_menu_page

于 2013-10-06T15:38:08.737 回答