Cum să dezactivezi bara de administrare pentru abonați în WordPress
Am un site de membrii și trebuie să dezactivez bara de administrare pentru abonați.
Am folosit următorul cod:
add_action('after_setup_theme', 'remove_admin_bar');
function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
show_admin_bar(false);
}
}
care elimină bara de administrare din partea publică pentru abonați, dar când aceștia accesează pagina de profil wp-admin/profile.php, bara de administrare încă este vizibilă acolo.
Folosesc pluginul Paid Membership Pro care cred că face ca codul să nu funcționeze în zona de administrare pentru abonați.
De asemenea, am încercat acest cod pentru a elimina complet bara de administrare:
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');
Dar nici acest cod nu funcționează.
Vreau doar să elimin bara de administrare pentru abonați atât din partea publică cât și din zona de administrare.
Există vreun cod specific care îmi scapă? Folosesc Paid Membership Pro.
Vă mulțumesc pentru ajutor.

Pentru a ascunde bara de administrare de la utilizatorii ne-administratori, adăugați următorul cod în fișierul functions.php
// afișează bara de administrare doar pentru administratori
if (!current_user_can('manage_options')) {
add_filter('show_admin_bar', '__return_false');
}
// afișează bara de administrare doar pentru administratori și editori
if (!current_user_can('edit_posts')) {
add_filter('show_admin_bar', '__return_false');
}

A trebuit să fac același lucru, dar să păstrez bara de administrare pentru editori și administratori, eliminând-o pentru alte roluri. Am procedat astfel:
în 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;
}
tot în functions.php
// afișează bara de administrare doar pentru administratori și editori
if (!check_user_role(array('administrator','editor'))) {
add_filter('show_admin_bar', '__return_false');
}

Echipa PMPro a creat un plugin pentru a face acest lucru: https://wordpress.org/plugins/hide-admin-bar-from-non-admins/
Acesta include codul PHP și CSS necesar pentru a ascunde complet bara de administrare: 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);

show_admin_bar(false)
nu funcționează pe paginile din backend. Va trebui să eliminați hook-urile pentru bara de administrare dacă doriți să le eliminați din backend.
function remove_admin_bar_hooks() {
// Elimină hook-urile care afișează bara de administrare.
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);
// Elimină clasa admin-bar din tag-ul body.
add_filter('body_class',function($wp_classes, $extra_classes) {
// Șterge clasa admin-bar din array-uri dacă este prezentă.
return array_diff(
array_merge( $wp_classes, (array) $extra_classes ),
array('admin-bar')
);
},10000,2);
}
Puteți consulta acest articol pentru mai multe informații: https://blog.terresquall.com/2021/09/remove-the-admin-bar-on-the-wordpress-admin-backend/

Puteți utiliza plugin-ul "AdminBar Editor" pentru a edita elementele din bara de administrare: https://wordpress.org/plugins/admin-bar/ sau puteți utiliza codul de mai jos pentru a ascunde bara de administrare pentru abonați.
function wpse_hide_admin_bar(){
if( current_user_can( 'subscriber' ) ) {
show_admin_bar(false);
}
}

Am făcut o scurtă cercetare pe această temă și cred că nu poți să faci asta cu o funcție, așa cum este menționat în codex.
Notă: Nu mai este posibil să ascunzi Bara de unelte când vizualizezi Ecranele de Administrare, dar utilizatorii o pot dezactiva în partea frontală a site-ului din ecranul lor de Profil.
Dezactivarea în partea frontală are același efect ca ceea ce ai făcut deja.
Aș sugera să o ascunzi cu css.
#wpadminbar {
display: none;
}
html {
padding-top: 0; // Mută conținutul paginii în sus cu înălțimea barei
}

Am reușit să fac asta cu CSS și am făcut-o permanentă prin adăugarea fișierului CSS în Child Theme.

Bara de administrare încă există cu această 'soluție', doar că nu este vizibilă. De asemenea, este încărcată, afectând performanța. Dacă aveți utilizatori cu puține cunoștințe despre instrumentele de dezvoltare web din browser, bara de administrare revine.

Vezi comentariul meu la întrebare, legat de https://wordpress.stackexchange.com/questions/77639/disable-the-admin-bar și https://wordpress.stackexchange.com/questions/186071/disable-admin-bar-render-on-plugin-page/186080#186080
