Полгода назад я писал статью о том, как полностью закрыть доступ в админку WordPress, теперь я покажу, как блокировать конкретные страницы.
Рассмотрим тут два варианта — перенаправление на другую страницу и вывод стандартного вордпрессовского сообщения об ошибке.
Редирект на другую страницу
Если у пользователя будет недостаточно прав для доступа к странице, его просто будет перекидывать в консоль (на главную) админ-панели.
function true_block_admin_pages_redirect() { global $pagenow; // тут перечисляем в массиве страницы, которые хотим скрыть, я например закрыл весь раздел меню "Плагины" $pages_to_block = array( 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ); if(in_array($pagenow, $pages_to_block)){ // указываем URL, на который будем перенаправлять тех, у кого нет доступа, в данном случае - главная страница админки wp_redirect( admin_url('/') ); exit; } } // в этом условии необходимо перечислить права, которые необходимо иметь пользователю, чтобы получить доступ // удалите условие, если нужно закрыть страницы для всех if(!current_user_can('administrator')){ add_action('admin_init', 'true_block_admin_pages_redirect'); }
Вы также можете не просто закрыть доступ к каким-то конкретным страницам в админке, но и
удалить из меню пункты, соответствующие им.
Вывод сообщения об ошибке
Вместо того, чтобы просто редиректить непонимающего пользователя на другую страницу, можно вывести определенное сообщение, объясняющее что к чему.
В этом примере я полностью (для администраторов тоже) блокирую доступ к странице с комментами:
function true_block_admin_pages_error() { global $pagenow; $pages_to_block = array( 'edit-comments.php' ); if(in_array($pagenow, $pages_to_block)){ // внутри скобок, в кавычках, указываем своё сообщение, HTML поддерживается wp_die('Прости, доступ к этой странице для тебя закрыт. <a href="' .admin_url('/'). '">Вернуться в админку.</a>'); exit; } } add_action('admin_init', 'true_block_admin_pages_error');
Весь код нужно вставлять в functions.php вашей темы.