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

如何移除特定WordPress用户的WooCommerce及Elementor菜单页面

解决WordPress插件菜单隐藏问题

你推测的原因完全正确:这类第三方插件的菜单并非使用WordPress核心页面slug,而是通过admin.php?page=xxx的形式注册;更关键的是你的钩子执行时机太早——WooCommerce和Elementor通常在默认的admin_menu钩子(优先级10)之后才完成菜单注册,导致你的remove_menu_page调用时,目标菜单还未被添加,自然无法生效。

修复方案

调整钩子优先级,并使用完整的页面标识(即admin.php?page=xxx)来移除菜单:

修改后的代码

public function __construct()
{
    // 将钩子优先级设为999,确保在第三方插件注册菜单之后执行
    add_action( 'admin_menu', array($this, 'hide_default_menu_pages'), 999 );
}

public function hide_default_menu_pages()
{
    $restricted_users = array(
        'USERONE',
        'USERTWO',
    );
    $current_user = wp_get_current_user();
    // 推荐用user_login(注册时的唯一标识),nickname可被修改,若业务需要可保留原逻辑
    $username = $current_user->user_login; 
    // $username = get_the_author_meta( 'nickname', $current_user->ID ); 

    if( in_array( $username, $restricted_users ) ){
        // 移除核心系统菜单
        remove_menu_page( 'themes.php' );
        remove_menu_page( 'plugins.php' );
        remove_menu_page( 'edit-comments.php' );
        remove_menu_page( 'tools.php' );
        remove_menu_page( 'options-general.php' );
        remove_menu_page( 'edit.php' );
        remove_menu_page( 'upload.php' );
        
        // 移除WooCommerce和Elementor菜单
        remove_menu_page( 'admin.php?page=wc-admin' );
        remove_menu_page( 'admin.php?page=elementor' );
    }
}

额外说明

  • 优先级设置:将add_action的第三个参数设为999,确保你的代码在绝大多数第三方插件完成菜单注册后执行,保证remove_menu_page能定位到目标菜单。
  • 菜单slug验证:如果修改后仍无效,可通过右键菜单→“检查”查看对应<a>标签的href属性,确认完整的page=xxx参数,以此作为remove_menu_page的参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:22:38