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

Примеры, перечисленные ниже, предназначены для того, чтобы закрыть доступ к админке некоторым группам пользователей и даже конкретным пользователям.

Хочу обратить ваше внимание на то, что если вы хотите заблокировать админку для всех кроме себя, то лучше делать это по IP через .htaccess.

А теперь пример.

В данном случае посылается 404-й заголовок, говорящий о том, что страница не существует, но также можно вывести какое-нибудь сообщение, либо подключить специальный HTML-файл.

function true_wp_admin_block() {
	if (!current_user_can('administrator')) { // если не администратор
		header('HTTP/1.0 404 Not Found');
		exit();
	}	
}
add_action('admin_menu', 'true_wp_admin_block');

Глянем ещё один примерчик, в этот раз будем блокировать конкретного юзера:

function true_wp_admin_by_user() {
	global $user_ID;
	if ($user_ID == '1') { // ID пользователя, для которого закрываем доступ
		header('Content-Type: text/html; charset=utf-8');
		$user = get_userdata($user_ID);
		echo "Эй, {$user->first_name} {$user->last_name}, тебе сюда нельзя!";
		exit();
	}	
}
add_action('admin_menu', 'true_wp_admin_by_user');

Весь код засовывать в файл functions.php, находящийся в папке с текущей темой.

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 6

Комментирование этого поста более не доступно.
  • maxsimuzz 25 марта 2015 #

    А как указать несколько ID для блокировки?

    • Миша 25 марта 2015 #
      if ( in_array( $user_ID, array('1','7','1478') ) {
       
      }
      • maxsimuzz 25 марта 2015 #
        function true_wp_admin_by_user() {
        	global $user_ID;
        	if ( in_array( $user_ID, array('1','7','1478') ) {
         
        }
        		header('Content-Type: text/html; charset=utf-8');
        		$user = get_userdata($user_ID);
        		echo "Эй, {$user->first_name} {$user->last_name}, тебе сюда нельзя!";
        		exit();
        	}	
        }
        add_action('admin_menu', 'true_wp_admin_by_user');

        Получилось так, но не работает 🙁

        • Миша 26 марта 2015 #

          Вижу лишнюю скобку } на 5й строчке.

          • Владимир 9 декабря 2016 #

            и на третьей строке не хватает скобки ) закрывающей if 🙂

            • Миша 10 декабря 2016 #

              Да, точно)