【问题标题】:Hide in Woocommerce Dashboard, for specific User Role 'Order' sub-menu from Woocommerce隐藏在 Woocommerce 仪表板中,针对来自 Woocommerce 的特定用户角色“订单”子菜单
【发布时间】:2019-04-18 08:52:32
【问题描述】:

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 项目,但我没有找到仅隐藏订单子菜单而不是整个项目的解决方案。 谁有想法?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    您使用的是全局 $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 就可以访问该页面。所以为了阻止对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' );
    

    【讨论】:

    • 你的想法行得通。但是如何不仅隐藏页面,而且通常限制对该子菜单的url的访问,因为如果您知道页面的url,即使子菜单是也可以访问页面的隐。您有解决此问题的想法吗?
    • @问你是对的。任何知道 url 的人都可以访问该页面。我已经通过修复该问题更新了我的答案。请参阅我的答案的 UPDATE 部分。如果可行,请为我的答案投票
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2018-03-22
    • 2019-07-20
    • 2021-02-04
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多