Берете создаете юзера, добавляете ему кастомную роль и кастомную возможность. Затем для него закрываете все кроме того, что разрешено, проверяете по новой возможности. Разрешать/закрывать следующим образом
Список плагинов получаете вот так
global $wp_list_table;
$plugins = $wp_list_table->items;
#Ключами тут являются строки такого вида 'plugin-directory/plugin-file.php' проверять по ним
Дaльше вешаетесь на след фильры.
'site_transient_update_plugins' - скрыть обновление плагина
'pre_current_active_plugins' - скрыть плагин из списка плагинов
'admin_init' - сюда вешаете проверку на текущую страницу и запрет доступа к ней
проверяете через current_screen и $_GET
и если запрещено, то делаете так
wp_die( 'Доступ запрещен' );
Скрывать меню так
global $menu;
foreach ( $menu as $i => $item ) {
unset( $menu[ $i ] );
}
#В $item[2] строка вида page.php?param=param_val - проверять по нему
Вешать на хук
'admin_menu'
Это алгоритм как и что делать, если разбираетесь, то поможет, если нет, то извините(( писать сам функционал, но оно такое, нет желания час терять на это сейчас