隐藏在Woocommerce仪表板中,用于Woocommerce的特定用户角色“订单”子菜单

时间:2019-04-18 08:52:33

标签: php wordpress woocommerce

if (!current_user_can('administrator')) {
 function remove_admin_menus () {
     global $menu;
     $removed = array(
         __('WooCommerce'),
         );
     end ($menu);
    while (prev($menu)){
         $value = explode(
                 ' ',
                 $menu[key($menu)][0]);
         if(in_array($value[0] != NULL?$value[0]:"" , $removed)){
             unset($menu[key($menu)]);
         }
     }
 }
 }
 add_action('admin_menu', 'remove_admin_menus');

如果您是管理员,则此代码从Wordpress仪表板隐藏整个Woocommerce项目,但我没有找到解决方案来仅隐藏“订单”子菜单,而不隐藏整个项目。enter image description here 谁有主意?

1 个答案:

答案 0 :(得分:2)

您正在使用全局$menu而不是$submenu。然后,您将获得所有已注册的submenus的列表。您可以添加以下代码。另外,最好在函数调用中检查用户是否为管理员

 function remove_admin_menus(){
  global $submenu;
  if(current_user_can('administrator')){
    unset($submenu['woocommerce']['1']);
  }
}
add_action('admin_menu', 'remove_admin_menus');

更新

即使菜单被隐藏,只要知道网址,就可以访问该页面。因此,为了阻止对url的访问,请添加以下内容

function restrict_woo_submenu_userrole(){
  $current_screen = get_current_screen();
  $p_id = $current_screen->id;
  if($p_id == 'edit-shop_order' && current_user_can('administrator')){
    wp_die('Restricted Access.');
  }
}
add_filter( 'current_screen', 'restrict_woo_submenu_userrole' );