Как я могу предотвратить появление определенных пунктов меню WordPress в определенных профилях пользователей?

Я работаю на веб-сайте WordPress, где я хотел бы запретить доступ к определенным пунктам меню WordPress для определенных профилей пользователей. Мне удалось предотвратить большинство пунктов меню, которые должны быть «скрыты», однако я не могу удалить панель управления WordPress, WooCOmmerce или Visual Composer.

Я ввел следующий код, в functions.php но пункты меню по-прежнему появляются:

<?php
function remove_admin_menu_links(){
$user = wp_get_current_user();
if( $user && isset($user->user_email) && '[email protected]' == $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 не могут быть «скрыты»?

Обновить

Я только что обнаружил, что для удаления Visual Composer, как пункт меню, вам необходимо заменить remove_menu_page('admin.php?page=vc-welcome'); с remove_menu_page( 'vc-general' );

Тем не менее, кажется, что это работает только для пользователей с пользовательской ролью «Администратор».
Я пытаюсь удалить «Visual Composer» из роли «Менеджер магазина», но пока не понял этого.

0

Решение

Вы можете использовать ловушку 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) && '[email protected]' == $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) && '[email protected]' == $user->user_email ) {
echo '<pre>';
print_r($_GLOBALS['menu']);
}
}

Используя приведенный выше код, вы увидите список всех всех меню.
Спасибо

0

Другие решения

Я только что понял проблему.

Если вы хотите удалить Visual Composer из определенной роли пользователя, вам нужно перейти в настройки Visual Composer через панель управления WordPress. Причина, по которой мой код, по моему вопросу, не работал, была в том, что настройки плагина Visual Composer переопределяли код в моем functions.php файл.

0

По вопросам рекламы [email protected]