You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于用户角色/ID等隐藏WordPress后台菜单项目

问题原因及解决方案

核心错误点

  • 钩子选择错误:使用admin_head钩子且优先级设置为5,此时WooCommerce、Elementor、Yith等第三方插件的菜单尚未完成注册,提前执行删除操作无法匹配到对应菜单。
  • remove_submenu_page参数不符合规则:该函数要求第一个参数为父菜单的纯slug,第二个参数为子菜单的纯slug,不需要拼接admin.php?page=前缀。WooCommerce顶级菜单的正确slug为woocommerce,你之前传入的路径格式无法匹配到对应父菜单。
  • 菜单slug包含多余参数:Elementor模板菜单的slug不需要携带tabs_group=library参数,代码中也不应该使用HTML转义后的&,多余内容会导致菜单匹配失败。

修复后可直接使用的代码

// 为无manage_options权限的用户隐藏后台菜单
function hide_menu() {
    if ( !current_user_can('manage_options') ) {
        /* WP 默认菜单 */
        remove_menu_page( 'edit.php' ); // 文章
        remove_menu_page( 'edit.php?post_type=page' ); // 页面
        remove_menu_page( 'edit-comments.php' ); // 评论
        remove_menu_page( 'themes.php' ); // 外观
        remove_menu_page( 'users.php' ); // 用户
        remove_menu_page( 'tools.php' ); // 工具

        /* 插件相关菜单 */
        // 隐藏WooCommerce子菜单
        remove_submenu_page( 'woocommerce', 'wc-settings' );  // WooCommerce设置
        remove_submenu_page( 'woocommerce', 'wc-addons' );  // WooCommerce扩展/市场
        // 隐藏Elementor模板菜单
        remove_menu_page( 'edit.php?post_type=elementor_library' ); // Elementor模板
        // 隐藏Yith菜单
        remove_menu_page( 'admin.php?page=yith_wcan_panel' ); // Yith
    }
}
// 调整钩子为admin_menu,优先级设为999确保所有菜单注册完成后再执行删除
add_action('admin_menu', 'hide_menu', 999 );

补充调试方案

如果调整后Yith菜单仍无法隐藏,可以临时在函数内加入以下代码,在后台页面顶部打印所有已注册菜单的slug,确认Yith菜单的正确标识后替换即可:

global $menu;
echo '<pre>';
print_r($menu);
echo '</pre>';

调试完成后删除该段代码即可。

内容的提问来源于stack exchange,提问作者94a94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:27:03