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

15 июл. 2011 г., 00:06:16
Просмотры: 23.3K
Голосов: 13

Я хочу запретить определенным ролям пользователей доступ к панели управления http://www.openeye.net/wp-admin/. Я перенес и изменил стиль профилей пользователей на новую страницу, которая доступна на сайте. Как это можно реализовать?

1
Комментарии

Я запросил у WooCommerce изменение их настройки, чтобы можно было управлять авторизациями для их части меню. Идея нуждается в голосах на: https://ideas.woocommerce.com Пожалуйста, отдайте ей максимум 3 балла, спасибо!

Stefan Stefan
21 нояб. 2019 г. 09:55:23
Все ответы на вопрос 4
7
27

Чтобы ограничить доступ подписчиков и участников к админ-панели:

function wpse23007_redirect(){
  if( is_admin() && !defined('DOING_AJAX') && ( current_user_can('subscriber') || current_user_can('contributor') ) ){
    wp_redirect(home_url());
    exit;
  }
}
add_action('init','wpse23007_redirect');

Надеюсь, это поможет. Каждая роль дает пользователю соответствующую capability (возможность), которая совпадает с именем роли, поэтому вы можете использовать любое название роли как capability.

15 июл. 2011 г. 00:13:46
Комментарии

Отлично, однако я получаю синтаксическую ошибку во второй строке.

Zach Shallbetter Zach Shallbetter
15 июл. 2011 г. 00:23:46

А, понятно, это связано с лишней ( после ('DOING_AJAX')

Zach Shallbetter Zach Shallbetter
15 июл. 2011 г. 00:58:14

Ой, извините; это было намеренно. Там должна была быть еще одна закрывающая в конце. Я добавил её в ответ.

John P Bloch John P Bloch
15 июл. 2011 г. 18:06:32

Есть ли причина, почему это не работает с темой 2011 и плагином members?

Zach Shallbetter Zach Shallbetter
9 сент. 2011 г. 09:36:43

Кажется, это не работает на сайтах сети. Есть идеи почему?

Zach Shallbetter Zach Shallbetter
10 окт. 2011 г. 00:59:11

Вроде работает у меня на стандартной установке WordPress. Большое спасибо :-)

Joshc Joshc
10 мар. 2012 г. 19:54:40

Ajax-запрос на admin-ajax.php перенаправляет меня на главную страницу. У меня не мультисайт.

Sisir Sisir
7 мая 2012 г. 13:19:31
Показать остальные 2 комментариев
0
//Если роль пользователя Подписчик, он не может войти в админку
function wpse23007_redirect()
{
    if( is_admin() && !defined('DOING_AJAX') && current_user_can('subscriber') )
    {
        wp_logout();
        wp_redirect(home_url());
        exit;
    }
}
add_action('init','wpse23007_redirect');
28 авг. 2016 г. 09:59:53
0

Да, вам нужно использовать функцию current_user_can( $capability ). Вот официальная справка WordPress: https://codex.wordpress.org/Function_Reference/current_user_can

28 авг. 2016 г. 11:44:44
0
add_action('init', function(){

      // Получаем URL для редиректа из HTTP_REFERER или домашнюю страницу
      $redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
      // Получаем текущего пользователя
      $user = wp_get_current_user();
      // Проверяем, что это не AJAX-запрос и пользователь имеет роль "подписчика"
      if ( !defined('DOING_AJAX') && in_array( 'subscriber', (array) $user->roles ) ) {

          // Выполняем редирект и завершаем выполнение скрипта
          wp_redirect($redirect);
          exit();
      }
});
15 июл. 2019 г. 19:52:03