如何移除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
相关产品推荐
相关产品推荐

