当挂接到admin_menu而不是admin_init时,WordPress显示菜单页面

时间:2019-07-03 00:33:24

标签: wordpress

我创建了一个插件,并正在admin菜单上编写该页面的代码。后端菜单中的链接出现,并且工作正常(左侧工具栏上的链接)。但是,当我尝试单击该URL时,URL已加载,但在“抱歉,您不能访问此页面”页面上收到消息。

我的初始代码如下:

add_action('admin_init', 'settings_menu_page');

function settings_menu_page() {

    add_menu_page( 
    __('Settings Page', 'wpplugin'),
    __('Custom Settings', 'wpplugin'),
    'manage_options',
    'wpplugin',
    'settings_page_callback',
    '',
    85
 );

}

function settings_page_callback() {
    esc_html_e( 'Settings page text', 'wpplugin' );
}

然后我决定将动作挂钩更改为'admin_menu',使代码如下所示:

add_action('admin_menu', 'settings_menu_page');

function settings_menu_page() {

    add_menu_page( 
    __('Settings Page', 'wpplugin'),
    __('Custom Settings', 'wpplugin'),
    'manage_options',
    'wpplugin',
    'settings_page_callback',
    '',
    85
 );

}

function settings_page_callback() {
    esc_html_e( 'Settings page text', 'wpplugin' );
}

使用此代码,我可以看到页面。唯一改变的是钩子。

我已经引用了admin_menuadmin_init的文档,但对于它们之间的区别,我感到有些茫然,这是因为它们导致他们允许具有许可但没有许可的人另一个。

注意:我和我都是同一位WordPress用户,具有管理员权限。

有人知道这里有什么区别吗?

1 个答案:

答案 0 :(得分:0)

两个挂钩之间的区别在于它们何时被触发。当基本菜单结构就绪且基本管理面板已初始化时,将触发admin_menu

另一方面,钩子admin_init在用户访问管理区域时触发的任何其他管理端挂钩之前被触发。此外,admin_init挂钩不能在面向用户的管理屏幕上运行。它admin-ajax.phpadmin-post.php上运行

您可以在下面提到的链接上阅读有关这些钩子和运行顺序的更多信息:

admin_init

admin_menu

Default actions Run on front and admin

祝你好运!