【问题标题】:Remove submenu for 'Add Order' in WooCommerce on WordPress admin dashboard在 WordPress 管理仪表板上删除 WooCommerce 中“添加订单”的子菜单
【发布时间】:2021-02-04 11:37:37
【问题描述】:

我的 WooCommerce 版本是 4.5.2。

我想删除自定义用户的“添加订单”,使其无法访问wp-admin/post-new.php?post_type=shop_order

我使用用户角色编辑器创建了一个自定义用户,具有以下权限:

这样,用户只能查看现有订单,点击订单预览更新为“已完成”。

我试过用这个:

remove_submenu_page( 'edit.php?post_type=shop_order', 'post-new.php?post_type=shop_order');

...但是订单主菜单变得无法访问。

我看到了这个帖子 Remove or hide "add new" button on woocommerce on bulk order panel,它使用 CSS 从页面中隐藏了“添加订单”。

我希望有人能给我指出如何实现我所寻找的方向。


更新:

根据 7uc1f3r 的回答,这是我的输出

[edit.php?post_type=shop_order] => Array
    (
        [5] => Array
            (
                [0] => Orders 
                [1] => edit_shop_orders 
                [2] => edit.php?post_type=shop_order
            )
            
        [10] => Array
            ( 
                [0] => Add order 
                [1] => edit_shop_orders 
                [2] => post-new.php?post_type=shop_order 
            )
    ) 

使用提供的解决方案,我使用它以便自定义用户无法添加订单和访问 wp-admin/post-new.php?post_type=shop_order:

    unset( $submenu['edit.php?post_type=shop_order'][10][0] );
    unset( $submenu['edit.php?post_type=shop_order'][10][1] );
    unset( $submenu['edit.php?post_type=shop_order'][10][2] );

此外,我应用 CSS 来隐藏管理面板中的“添加顺序”:

    ul.wp-submenu.wp-submenu-wrap {
        display: none !important;
    }

现在看起来像这样:

【问题讨论】:

  • 我已经回答了你的问题,因为我没有相同的选项(也许这是由插件添加的?)。我想收到您的反馈,然后我可以相应地调整我的答案。真诚的
  • 谢谢@7uc1f3r,这是一个了不起的解决方案!我使用“用户角色编辑器”插件创建了一个自定义 WooCommerce 角色,如上面的屏幕所示,我也应用了一些钩子。

标签: php wordpress woocommerce backend dashboard


【解决方案1】:

我正在使用WC 4.4.1WC 4.6.0,在这两个版本中都无法从菜单中创建新订单。

更新:由于您发布的输出,这应该足以删除“订单:添加新”

function action_admin_menu() {
    global $menu, $submenu;

    // Unset 'Order: add new'
    unset( $submenu['edit.php?post_type=shop_order'][10] );
}
add_action( 'admin_menu', 'action_admin_menu' );

可选:对于“产品:添加新”和调试,您可以使用

// DEBUG: This displays the complete wordpress admin menu on your dashboard for admin only. (Remove afterwards)
function debug_admin_menus() {
    global $menu, $submenu, $pagenow;
    if ( current_user_can('manage_options') ) {
        if( $pagenow == 'index.php' ) {  // print on dashboard
            echo '<pre>', print_r( $menu, 1 ), '</pre>'; // top level menus
            echo '<pre>', print_r( $submenu, 1 ), '</pre>'; // submenus
        }
    }
}
add_action( 'admin_notices', 'debug_admin_menus' );

function action_admin_menu() {
    global $menu, $submenu;

    // Unset 'Products: add new'
    unset( $submenu['edit.php?post_type=product'][10] );
}
add_action( 'admin_menu', 'action_admin_menu' );

相关:

【讨论】:

  • @chubby 我现在已经调整了你的问题和我的答案。随意使用调试信息的输出删除您的上述 cmets。问候
猜你喜欢
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多