使用 add_submenu_page 时出现“您无权访问此页面”错误

sar*_*an8 3 wordpress

我正在使用 wp 的 add_submenu_page 函数在父菜单中添加子菜单,但是在访问该子菜单时出现此错误:

抱歉,您无权访问此页面。

我以管理员身份登录,刷新永久链接并注销然后登录,但没有任何变化。

我的代码:

class SPSetup {

    public function reg_func() {
        add_action( 'admin_menu', array( $this, 'sp_menu', ) );
    }

    public function sp_menu() {
        add_submenu_page( 
            'montheme_options', 'SP Dashboard', 'SP Dashboard', 
            'manage_options', 'sp-control', 
            array( $this, 'callback' ) 
        );
    }      
}


if ( class_exists( 'SPSetup ' ) ) {
    $SP= new SPSetup ();
    $SP->reg_func();
} 
Run Code Online (Sandbox Code Playgroud)

Wak*_*Wak 6

TLDR:为创建子菜单页面的操作添加较低的优先级,例如 99。

\n
add_action( \'admin_menu\', \'wpdocs_register_my_custom_submenu_page\', 99 );\n
Run Code Online (Sandbox Code Playgroud)\n

就我而言,我试图将子菜单添加到预安装的插件菜单中,所以我得到了同样的错误。

\n

感谢isabel104和她的评论我解决了这个问题:

\n

https://developer.wordpress.org/reference/functions/add_submenu_page/#div-comment-4596

\n

关于上面“更多信息”部分中的第一个注释,您还可能会遇到 \xe2\x80\x9cSorry, you are not allowed to access this page.\xe2\x80\x9d 消息,即使您\xe2\x80\x99ve hooked正确地进入 admin_menu 挂钩。如果所有这些都为真,则会出现此错误消息:

\n

您的父页面是您使用 add_menu_page 添加的自定义页面,并且\n该父页面是在另一个插件中创建的,而不是创建子菜单页面的同一个插件,并且\n您没有\xe2\x80\x99t 添加较低的优先级add_submenu_page 调用的 admin_menu 挂钩,因此子菜单页面可能会在父页面\xe2\x80\x93 之前触发,从而导致错误。

\n

解决方案:为创建子菜单页面的操作添加较低的优先级,例如 99。例如:

\n
add_action( \'admin_menu\', \'wpdocs_register_my_custom_submenu_page\', 99 );\n
Run Code Online (Sandbox Code Playgroud)\n


Art*_*oda 5

我有同样的问题。尝试在 'admin_menu' 挂钩中添加优先级并从子菜单 slug 中删除连字符。

add_action( 'admin_menu', array( $this, 'sp_menu'), 11);
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。

还要检查这个https://wordpress.stackexchange.com/questions/91377/admin-menu-as-submenu-from-another-plugin