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

如何移除WordPress中Bookings菜单指定项?ShopManager后台权限配置求助

解决WooCommerce Bookings菜单项无法移除的问题

问题根源

你之前的代码失效主要有两个核心原因:

  • Bookings主菜单的slug是wc-bookings(横杠分隔),而非你使用的wc_bookings(下划线)
  • 钩子优先级设置过低,Bookings的菜单加载晚于你设置的110优先级,导致移除操作执行时目标菜单还未创建

修正后的代码

function customize_shop_manager_dashboard_and_menus() {
    // 仅对Shop Manager角色生效,避免影响管理员权限
    if (current_user_can('shop_manager') && !current_user_can('manage_woocommerce')) {
        // 移除WooCommerce子菜单(原有效代码保留)
        remove_submenu_page('woocommerce', 'wc-admin&path=/customers'); // 客户
        remove_submenu_page('woocommerce', 'wc-admin&path=/extensions'); // 扩展
        remove_submenu_page('woocommerce', 'wc-settings'); // 设置
        remove_submenu_page('woocommerce', 'wc-status'); // 状态
        remove_submenu_page('woocommerce', 'wc-extensions'); // 扩展

        // 移除Bookings指定子菜单
        remove_submenu_page('wc-bookings', 'edit.php?post_type=bookable_resource'); // 资源
        remove_submenu_page('wc-bookings', 'post-new.php?post_type=product'); // 添加产品
        remove_submenu_page('woocommerce', 'wc-settings&tab=bookings'); // Bookings设置(若在WooCommerce设置下)
    }
}

// 提高优先级到999,确保在Bookings菜单加载完成后执行移除操作
add_action('admin_menu', 'customize_shop_manager_dashboard_and_menus', 999);

补充说明

  • 如果Bookings的设置项是独立菜单而非WooCommerce设置下的tab,可通过浏览器开发者工具查看菜单项URL,替换为对应的子菜单slug
  • 若仍不生效,可嵌套到woocommerce_loaded钩子中,确保WooCommerce和Bookings插件完全加载后再执行:
add_action('woocommerce_loaded', function() {
    add_action('admin_menu', 'customize_shop_manager_dashboard_and_menus', 999);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:34:58