如何防止特定的 WordPress 菜单项出现在某些用户配置文件中?

How can I prevent specific WordPress Menu Items from appearing to certain User Profiles?

我在 WordPress 网站上工作,我想阻止某些用户配置文件访问特定的 WordPress 菜单项。我设法阻止了大多数需要 'hidden' 的菜单项,但是,我似乎无法删除 WordPress 仪表板、WooCOmmerce 或 Visual Composer。

我已经在 functions.php 中输入了以下代码,但菜单项仍然出现:

<?php
function remove_admin_menu_links(){
    $user = wp_get_current_user();
    if( $user && isset($user->user_email) && 'name@domain.com' == $user->user_email ) {

    remove_menu_page('index.php');                          // WordPress Dashoboard                                
    remove_menu_page('edit.php?post_type=shop_order.php');  // WooCommerce   
    remove_menu_page('admin.php?page=vc-welcome');        // Visual Composer
    }
}      

add_action('admin_menu', 'remove_admin_menu_links');
?>

我有什么地方做错了吗?或者只是某些 WordPress 菜单项不能 'hidden' 的情况?

更新

我刚刚发现,要删除作为菜单项的 Visual Composer,您需要将 remove_menu_page('admin.php?page=vc-welcome'); 替换为 remove_menu_page( 'vc-general' );

也就是说,这似乎只适用于具有用户角色 'Administrator' 的用户。 我正在尝试从 'Shop Manager' 角色中删除 'Visual Composer' 但尚未弄清楚。

您可以使用 admin_init 挂钩删除菜单:

   add_action('admin_init','remove_admin_menu_links');

function remove_admin_menu_links (){
$user = wp_get_current_user();

    if( $user && isset($user->user_email) && 'name@domain.com' == $user->user_email ) {

        remove_menu_page('index.php'); // WordPress Dashoboard                                
        remove_menu_page('edit.php?post_type=shop_order.php');  // WooCommerce   
        remove_menu_page('admin.php?page=vc-welcome');        // Visual Composer
        }
    }

为了在此函数下进行调试,请添加以下行

function remove_admin_menu_links (){
$user = wp_get_current_user();

    if( $user && isset($user->user_email) && 'name@domain.com' == $user->user_email ) {
       echo '<pre>';
       print_r($_GLOBALS['menu']);
        }
    }

通过使用上面的代码,您将看到所有菜单的列表。 谢谢

我刚刚弄清楚了问题。

如果您希望从特定用户角色中删除 Visual Composer,您需要通过 WordPress 仪表板进入 Visual Composer 设置。在我的问题中,我的代码不起作用的原因是因为 Visual Composer 插件设置覆盖了我的 functions.php 文件中的代码。