【问题标题】:WordPress shows menu page when hooking into admin_menu but not admin_initWordPress 连接到 admin_menu 但不 admin_init 时显示菜单页面
【发布时间】:2019-07-03 00:33:24
【问题描述】:

我创建了一个插件,并正在为管理菜单上的页面编写代码。后端菜单中的链接出现并且工作正常(左侧工具栏上的链接)。但是,当我尝试点击它时,会加载 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 用户。

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

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    这两个钩子的区别在于它们被触发的时间。 admin_menu 在基本菜单结构到位并且基本管理面板已初始化时触发。

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

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

    admin_init

    admin_menu

    Default actions Run on front and admin

    祝你好运!!!

    【讨论】:

    • admin_init 挂钩确实在面向用户的管理屏幕上运行;但它也可以在 admin-ajax.php 和 admin-post.php 上运行。
    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多