在不同的add_menu_page插件中使用add_submenu_page出错


Error when using add_submenu_page in a different plugin to add_menu_page

我正在尝试开发多个插件来满足我在WordPress中的各种需求。我想我应该创建一个'基础'插件,然后其他插件可以安装在上面。

我已经创建了一个菜单页在我的基础插件使用add_menu_page(所有这些都是在我的类显然,变量替换为字符串便于阅读)

private function __construct() {
    add_action('admin_menu', array($this, 'add_group_page'));
}
public function add_group_page(){
    add_menu_page('Group Plugins', 'Group Plugins', 'activate_plugins', 'group-plugins', array($this, 'group_page_callback'), '', 3.1415);
}
public function group_page_callback() { ?>
    <div class="wrap">
        <h2>Group Plugins</h2>
    </div>
<?php
}

这工作得很好,我的菜单结构现在有:(标签错误的目的,为了url的可读性)

(Group Plugins)[admin.php?page=group-plugins]

在我的第二个插件中,我尝试调用add_submenu_page:

private function __construct() {
    add_action('admin_menu', array($this, 'add_groupforms_page'));
}
public function add_groupforms_page(){
    add_submenu_page('group-plugins', 'Group Forms', 'Group Forms', 'manage_options', 'group-forms', array($this, 'groupforms_page_callback'));
}
public function groupforms_page_callback() { ?>
    <div class="wrap">
        <h2>Group Forms</h2>
    </div>
<?php
}

Which 似乎在添加新的子菜单项时已经起作用了。但是菜单结构变为:

(Group Plugins)[admin.php?page=**group-forms**]

—(Group Forms)[admin.php?page=**group-forms**]

所以这两个链接都链接到新的子菜单页面,当我点击其中一个时,我只会得到一个后端样式的页面,上面写着You do not have sufficient permissions to access this page.

我仍然可以访问'Group Plugins'的原始页面,如果我在url更改为' group-plugins ',但有些东西显然是不对的,当我谷歌错误时,唯一真正出现的是人们说要检查它的钩在正确的地方:admin_menu,这是,因为我已经检查了文档很多次试图弄清楚。

必须在菜单后启动子菜单。这是通过钩子优先级完成的,当没有声明默认为10时。

主菜单设置默认优先级:

add_action('admin_menu', array($this, 'add_group_page'));

子菜单的优先级必须较低:

add_action( 'admin_menu', array($this, 'add_groupforms_page'), 11 );