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

Опубликовано: 2020-02-23

Скрыть панель администратора по ролям Важно скрыть панель администратора в WooCommerce от подписчиков, клиентов и пользователей без прав администратора, чтобы избежать доступа к панели управления WordPress. Есть способы скрыть панель администратора WordPress, как показано в этом руководстве — как скрыть панель администратора в WordPress. Эти же методы можно использовать на сайте WooCommerce, но с некоторыми условиями для каждого из случаев.

WooCommerce Скрыть панель администратора для клиентов или подписчиков

Скрыть панель администратора для опции администратора WooCommerce

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

Прежде чем использовать плагин, вы должны сначала попробовать этот быстрый вариант в панели администратора WordPress. Этот вариант также хорошо работает для сайтов WooCommerce, нет никакой разницы.

Перейдите в настройки профиля пользователя администратора и проверьте эту опцию, чтобы скрыть панель администратора для администраторов при просмотре сайта. WooCommerce Скрыть панель администратора для клиентов или подписчиков

Снимите этот флажок и сохраните настройки, а затем зайдите в интерфейс, чтобы увидеть, скрыта ли панель администратора. Как вы можете видеть на изображении ниже, панель администратора будет скрыта для администратора при просмотре сайта.

WooCommerce Скрыть панель администратора для клиентов или подписчиков

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

Это также помогает, когда вы пытаетесь отладить некоторые проблемы темы WooCommerce, связанные с отображением заголовка.

WooCommerce Скрыть параметр штрих-кода администратора

Чтобы реализовать то же самое для клиентов и подписчиков WooCommerce, нам нужно использовать фильтр 'show_admin_bar' чтобы вернуть false, чтобы мы скрыли панель администратора.

Есть множество способов использовать этот хук, а также есть функция с тем же именем, которая работает одинаково.

Функция show_admin_bar( bool $show ) принимает один Boolean параметр (True или False) и может использоваться следующим образом:

 show_admin_bar (ложь);

Этот код при добавлении в файл functions.php вашей темы скроет панель администратора. Я протестировал его с установленной темой магазина WooCommerce, и он отлично работает, скрывая панель администратора.

WooCommerce Скрыть панель администратора для клиентов или подписчиков

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

В этом случае вы должны условно протестировать роль клиента или любую другую роль на вашем сайте, от которой вы хотите скрыть панель администратора.

Вы можете получить роли, доступные на вашем сайте WordPress, из «Добавить нового пользователя», а последний вариант имеет раскрывающийся список «Роли»:

роли пользователей вордпресс

Чтобы получить текущую роль пользователя, я написал руководство о том, как получить текущую роль в WordPress , и вы можете использовать его в случае, чтобы получить роль пользователя клиента и установить для функции show_admin_bar() значение false.

В этом случае следующий код можно использовать для получения текущей роли пользователя и условной проверки, является ли роль пользователя клиентом.

Этот код я поделился в руководстве о том, как получить текущую роль пользователя в WordPress , и мы можем переназначить его в этом случае:

 add_action('wp_head', 'njengah_get_current_user_role');

функция njengah_get_current_user_role() {

  if( is_user_logged_in() ) { // проверяем, есть ли авторизованный пользователь

   $user = wp_get_current_user(); // получение и установка текущего пользователя
   $roles = (массив) $user->roles; // получение роли

   //возврат $ролей; // возвращаем роль для текущего пользователя

     // Проверка с помощью print_r
      печать('<предварительно>');
      print_r($ роли);
       печать('</pre>');

    } еще {

          вернуть массив(); // если нет зарегистрированного пользователя, возвращаем пустой массив

   }

}

Когда вы протестируете этот код, добавив в functions.php, вы должны увидеть текущую роль пользователя, отображаемую в массиве, как показано на изображении ниже:

WooCommerce Скрыть параметр штрих-кода администратора

Мы можем получить эту роль пользователя из массива, используя key [0] , и когда мы немного изменим код и распечатаем роль пользователя, мы должны увидеть распечатку роли пользователя, как в следующем модифицированном коде:

 add_action('wp_head', 'njengah_get_current_user_role_print');

функция njengah_get_current_user_role_print() {

        if( is_user_logged_in() ) { // проверяем, есть ли авторизованный пользователь

          $user = wp_get_current_user(); // получение и установка текущего пользователя

          $roles = (массив) $user->roles; // получение роли

            эхо $роли[0];

              } еще {

              вернуть массив(); // если нет зарегистрированного пользователя, возвращаем пустой массив

       }

}

Поскольку мы успешно получили роль пользователя, теперь мы можем условно использовать ее в функции show_admin_bar() , чтобы скрыть панель администратора для определенной роли пользователя, которая может быть любой ролью.

Для иллюстрации теперь мы скрываем панель администратора для роли администратора, используя код ниже:

 add_action('wp_head', 'njengah_hide_admin_bar_for_administrator');

функция njengah_hide_admin_bar_for_administrator() {

     if( is_user_logged_in() ) { // проверяем, есть ли авторизованный пользователь

       $user = wp_get_current_user(); // получение и установка текущего пользователя

         $roles = (массив) $user->roles; // получение роли

          if( $roles[0] == 'administrator'){ //проверить роль здесь. Вы можете заменить его другими ролями пользователей. Пример редактора «клиент» и т. д.

           эхо $роли[0]; // выводим роль на экран для демонстрационных целей (должна быть удалена в продакшене)

           show_admin_bar (ложь); // скрыть роль для этого условия

     }

        } еще {

           вернуть массив(); // если нет зарегистрированного пользователя, возвращаем пустой массив

     }

}

Когда вы добавите этот код в файл functions.php, вы увидите, что роль администратора отображается на экране, как и раньше, а панель администратора была условно скрыта.

Вы можете заменить эту роль администратора на роль клиента, а также добавить несколько условных тестов в условие следующим образом:

 add_action('wp_head', 'njengah_hide_admin_bar_for_customer');

функция njengah_hide_admin_bar_for_administrator() {

if( is_user_logged_in() ) { // проверяем, есть ли авторизованный пользователь

              $user = wp_get_current_user(); // получение и установка текущего пользователя

                $roles = (массив) $user->roles; // получение роли

                    if( $roles[0] == 'customer'){ //проверить роль здесь. Вы можете заменить его другими ролями пользователей. Пример редактора «клиент» и т. д.

                эхо $роли[0]; // выводим роль на экран для демонстрационных целей (должна быть удалена в продакшене)

                      show_admin_bar (ложь); // скрыть роль для этого условия

        }

        } еще {

                вернуть массив(); // если нет зарегистрированного пользователя, возвращаем пустой массив

      }

}

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

Скрыть панель администратора по возможностям текущего пользователя

Альтернативный способ скрыть панель администратора от всех пользователей, ожидающих администратора, вы можете добавить следующий код в functions.php:

 если ( ! current_user_can( 'manage_options' ) ) {

   show_admin_bar (ложь);

}

Этот код использует условный тест current_user_can() , и вы можете отредактировать его для различных привилегий, например, для клиента он должен быть следующим:

 если ( ! current_user_can( 'прочитано' ) ) {

   show_admin_bar (ложь);

}

Это эквивалентно роли подписчика в WordPress. WooCommerce создает две роли — Customer и Shop Manager. Клиент эквивалентен подписчику, поэтому в этом случае возможности подписчика « читаются ».

Вы можете ознакомиться со всеми возможностями пользователей WordPress из документации «Роли и возможности». Вы можете узнать больше о ролях WooCommerce из документации по ролям и возможностям WooCommerce.

Внедрение кода для скрытия панели администратора в WooCommerce

В приведенном выше коде мы подробно объяснили, как все работает, чтобы скрыть панель администратора в WooCommerce.

Если вы заметили, что я использовал add_action() , прикрепленный к 'wp_head' для целей тестирования, но в производстве нам нужно использовать фильтр вместо хука действия.

В этом случае фильтр должен подключиться к 'show_admin_bar' и код должен быть следующим:

 add_filter('show_admin_bar', 'njengah_hide_admin_bar_for_customers', 20, 1 );

функция njengah_hide_admin_bar_for_customers($show){

           $user = wp_get_current_user(); // получение и установка текущего пользователя

            $roles = (массив) $user->roles; // получение роли

               if( $roles[0] == 'administator'){ // Проверяем роли пользователей здесь на основе ключей массива [0] [1] и соответствующих значений

                       $ показать = ложь;

                              вернуть $шоу;

               }

}

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

 /**

* Скрыть панель администратора для других ролей, кроме администратора

*/

add_filter('show_admin_bar', 'njengah_hide_admin_bar_others_expect_admin', 20, 1 );

функция njengah_hide_admin_bar_others_expect_admin($show) {

    если (! current_user_can('администратор')) $show = false;

     вернуть $шоу;

    }

Добавьте этот код в functions.php, чтобы скрыть панель администратора от других ролей, за исключением администраторов.

Последние мысли

Мы описали, как вы можете скрыть панель администратора в WordPress или WooCommerce, используя различные подходы. Вы можете выбрать любой из этих методов и добавить код в файл functions.php. Вы также можете изменить код, чтобы он подходил для различных сценариев, например, чтобы скрыть панель администратора от пользовательской роли WordPress.