Как определенным группам пользователей закрыть доступ к конкретным страницам админки WordPress?

Полгода назад я писал статью о том, как полностью закрыть доступ в админку 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 вашей темы.

Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также