Как убрать админ-панель для подписчиков в WordPress

12 сент. 2018 г., 16:17:51
Просмотры: 16.7K
Голосов: 5

У меня сайт с членством. Мне нужно отключить админ-панель для подписчиков.

Я использовал этот код:

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
  show_admin_bar(false);
}
}

Который удаляет админ-панель во фронтенде для подписчиков, но когда они переходят на страницу профиля wp-admin/profile.php, админ-панель там всё ещё отображается.

Я использую плагин Paid Membership Pro, который, как я думаю, мешает работе кода в бэкенде для подписчиков.

Также я пробовал этот код для полного удаления админ-панели:

if (!function_exists('disableAdminBar')) {

    function disableAdminBar(){

    remove_action( 'admin_footer', 'wp_admin_bar_render', 1000 );

    function remove_admin_bar_style_backend() {
      echo '<style>body.admin-bar #wpcontent, body.admin-bar #adminmenu { padding-top: 0px !important; }</style>';
    }

    add_filter('admin_head','remove_admin_bar_style_backend');

  }

}

add_filter('admin_head','remove_admin_bar_style_backend');

Но этот код тоже не работает.

Мне нужно просто убрать админ-панель для подписчиков и во фронтенде, и в бэкенде.

Может быть, я упускаю какой-то конкретный код? Я использую Paid Membership Pro.

Спасибо за помощь.

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

Отвечает ли это на ваш вопрос? Удалить верхнюю панель администратора

T.Todua T.Todua
14 мая 2020 г. 23:32:43
Все ответы на вопрос 7
0

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

// показывать панель администратора только для администраторов
if (!current_user_can('manage_options')) {
    add_filter('show_admin_bar', '__return_false');
}
// показывать панель администратора только для администраторов и редакторов
if (!current_user_can('edit_posts')) {
    add_filter('show_admin_bar', '__return_false');
}
22 июл. 2019 г. 16:26:20
0

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

в functions.php

function check_user_role($roles, $user_id = null) {
    if ($user_id) $user = get_userdata($user_id);
    else $user = wp_get_current_user();
    if (empty($user)) return false;

    foreach ($user->roles as $role) {
        if (in_array($role, $roles)) {
            return true;
        }
    }
    return false;
}

также в functions.php

// показывать панель администратора только для администраторов и редакторов
if (!check_user_role(array('administrator','editor'))) {
  add_filter('show_admin_bar', '__return_false');
}
19 февр. 2020 г. 19:26:12
0

Команда PMPro создала плагин для этого: https://wordpress.org/plugins/hide-admin-bar-from-non-admins/

Он включает PHP и CSS код, необходимый для полного скрытия панели администратора: https://plugins.svn.wordpress.org/hide-admin-bar-from-non-admins/trunk/hide-admin-bar-from-non-admins.php

function habfna_hide_admin_bar_settings()
{
?>
    <style type="text/css">
        .show-admin-bar {
            display: none;
        }
    </style>
<?php
}
function habfna_disable_admin_bar()
{
    if(!current_user_can('administrator'))
    {
        add_filter( 'show_admin_bar', '__return_false' );
        add_action( 'admin_print_scripts-profile.php', 'habfna_hide_admin_bar_settings' );
    }
}
add_action('init', 'habfna_disable_admin_bar', 9);
22 нояб. 2018 г. 02:16:17
0

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

function remove_admin_bar_hooks() {
    
    // Удаляет хуки, отвечающие за отображение панели администратора.
    remove_action('template_redirect','_wp_admin_bar_init', 0);
    remove_action('admin_init','_wp_admin_bar_init');
    remove_action('before_signup_header','_wp_admin_bar_init');
    remove_action('activate_header','_wp_admin_bar_init');
    remove_action('wp_body_open','wp_admin_bar_render',0);
    remove_action('wp_footer','wp_admin_bar_render',1000);
    remove_action('in_admin_header', 'wp_admin_bar_render', 0);
    
    // Удаляет класс admin-bar из тега body.
    add_filter('body_class',function($wp_classes, $extra_classes) {
        // Удаляет класс admin-bar из массивов, если он присутствует.
        return array_diff( 
            array_merge( $wp_classes, (array) $extra_classes ), 
            array('admin-bar')
        );
    },10000,2);
}

Для получения дополнительной информации вы можете обратиться к этой статье: https://blog.terresquall.com/2021/09/remove-the-admin-bar-on-the-wordpress-admin-backend/

26 сент. 2021 г. 18:35:52
0
// Отключение верхней панели администратора для всех ролей, кроме администраторов:
add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
    show_admin_bar(false);
}

}

10 янв. 2022 г. 06:17:05
0

Вы можете использовать плагин "AdminBar Editor" для редактирования элементов админ-панели: https://wordpress.org/plugins/admin-bar/ или использовать приведенный ниже код, чтобы скрыть админ-панель для подписчиков.

function wpse_hide_admin_bar(){
    if( current_user_can( 'subscriber' ) ) {
        show_admin_bar(false);
    }
}
28 апр. 2024 г. 15:12:32
4
-3

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

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

Отключение на фронтенде дает тот же результат, что вы уже сделали.

Я бы предложил скрыть ее с помощью CSS.

#wpadminbar {
    display: none;
}
html {
    padding-top: 0; // Поднять контент страницы на высоту панели
}
12 сент. 2018 г. 17:01:43
Комментарии

Удалось сделать с помощью CSS и сделать это постоянным, добавив CSS-файл в дочернюю тему.

Jitendra Mishra Jitendra Mishra
12 сент. 2018 г. 20:00:49

Админ-панель всё ещё существует с этим "решением", просто не видна. Также она загружается, что влияет на производительность. Если у вас есть пользователи с небольшими знаниями о инструментах разработчика в браузере, админ-панель вернётся.

bueltge bueltge
22 июл. 2019 г. 16:45:31

Да, @bueltge, но какое тогда лучшее решение?

Rik Lewis Rik Lewis
24 февр. 2020 г. 01:38:51

Смотрите мой комментарий к вопросу, связанный с https://wordpress.stackexchange.com/questions/77639/disable-the-admin-bar и https://wordpress.stackexchange.com/questions/186071/disable-admin-bar-render-on-plugin-page/186080#186080

bueltge bueltge
24 февр. 2020 г. 13:10:54