我想向store 经理隐藏WooCommerce中的一个子菜单"Home".

我可以用以下代码隐藏/禁用wc-admin:

function AtoJ_remove_menus() {
    if (current_user_can( 'shop_manager' )) {
        // WooCommerce
        remove_submenu_page( 'woocommerce', 'wc-admin' );
    }
}
add_action( 'admin_menu', 'AtoJ_remove_menus', 999 );

但如果我这样做,也会禁用store 经理访问WooCommerce Analytics管理部分的权限.

enter image description here

推荐答案

要(仅)禁用特定用户角色的Admin WooCommerce"Home"页面,我们可以隐藏WooCommerce"Home"子菜单项,并将相关请求重定向到WooCommerce"Orders"页面:

add_action( 'admin_head', 'disable_admin_woocommerce_home_fur_css' );
function disable_admin_woocommerce_home_fur_css() {
    $targeted_role = 'administrator'; // Here define the user role
    if ( current_user_can( $targeted_role ) ) :
    ?><style> li.toplevel_page_woocommerce ul li.wp-first-item {display:none !important;}</style><?php
    endif;
}


add_action( 'admin_menu', 'disable_admin_woocommerce_home_for_user_role', 999 );
function disable_admin_woocommerce_home_for_user_role() {
    global $submenu;
    $targeted_role = 'administrator'; // Here define the user role
    if ( current_user_can( $targeted_role ) ) {
        if ( isset($_GET['page']) && $_GET['page'] == 'wc-admin' && ! isset($_GET['path']) ) {
            wp_redirect( admin_url('edit.php?post_type=shop_order') );
            exit();
        }
    }
}

它将允许store 经理访问分析部分.

代码位于您的子主题的unctions.php文件中(或在插件中).经过测试,效果良好.

Php相关问答推荐

CodeIgniter AJAX表格提交中的CSRF token 再生问题

输入手写CSV时在PHP中进行日期判断

照明\Support\Collection::Filter():参数#1($Callback)的类型必须为?可调用、已给定数组、已调用

如何使用ms graph php sdk v2列出具有已知路径的DriveItem的子项

Htaccess-重写对&api.php";的API请求以及对";web.php";的其他请求

在WooCommerce中禁用特定日期之前的免费送货

使用正则表达式搜索两个子字符串(没有重叠/共享字符)

在PHP中循环访问多维数组,并按组显示内容

Sylius php -如何将购物车传递到小枝模板(Sylius模板事件)

无额外字段的Laravel同步

调用模型[App\Models\Employee]上未定义的关系[title]

使用 php Carbon 获取两个日期之间的随机日期和时间

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

Mac 上安装 php 时出现 Homebrew 错误

PHP - 计算非数值数组

Windows 身份验证在 IIS 中验证什么?我可以在我的情况下禁用匿名身份验证吗?

如何在PHP中对多个脚本调用进行排队?

为什么foreach循环会输出每个结果?

Laravel Docker 几个数据库

将加密/解密函数从 PHP 转换为 NodeJS