Rimuovi la barra di amministrazione per gli iscritti - Soluzioni WordPress
Ho un sito a pagamento. Devo disabilitare la barra di amministrazione per gli iscritti.
Ho utilizzato questo codice:
add_action('after_setup_theme', 'remove_admin_bar');
function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
show_admin_bar(false);
}
}
che rimuove la barra di amministrazione dal frontend per gli iscritti, ma quando accedono alla loro pagina del profilo wp-admin/profile.php, la barra amministrativa è ancora visibile.
Sto utilizzando il plugin Paid Membership Pro che penso abbia fatto in modo che il codice non funzionasse nel backend per gli iscritti.
Ho anche provato con questo codice per rimuovere la barra di amministrazione ovunque:
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');
Ma anche questo codice non funziona.
Voglio solo rimuovere la barra di amministrazione per gli iscritti sia dalle pagine frontend che backend.
Manca qualche codice specifico? Sto usando Paid Membership Pro.
Grazie per l'aiuto.

Per nascondere la barra di amministrazione agli utenti non amministratori, aggiungi il seguente codice al tuo file functions.php
// mostra la barra di amministrazione solo per gli amministratori
if (!current_user_can('manage_options')) {
add_filter('show_admin_bar', '__return_false');
}
// mostra la barra di amministrazione solo per amministratori e editor
if (!current_user_can('edit_posts')) {
add_filter('show_admin_bar', '__return_false');
}

Ho dovuto fare la stessa cosa ma mantenere la barra per gli editor e gli amministratori rimuovendola per gli altri ruoli. L'ho fatto in questo modo:
in 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;
}
sempre in functions.php
// mostra la barra di amministrazione solo per amministratori e editor
if (!check_user_role(array('administrator','editor'))) {
add_filter('show_admin_bar', '__return_false');
}

Il team di PMPro ha creato un plugin per fare questo: https://wordpress.org/plugins/hide-admin-bar-from-non-admins/
Include il codice PHP e CSS necessario per nascondere completamente la barra di amministrazione: 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)
non funziona nelle pagine di backend. Dovrai rimuovere gli hook della barra di amministrazione se vuoi rimuoverla dal backend.
function remove_admin_bar_hooks() {
// Rimuove gli hook che renderizzano la barra di amministrazione.
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);
// Rimuove la classe admin-bar dal tag body.
add_filter('body_class',function($wp_classes, $extra_classes) {
// Elimina la classe admin-bar dagli array se presente.
return array_diff(
array_merge( $wp_classes, (array) $extra_classes ),
array('admin-bar')
);
},10000,2);
}
Puoi fare riferimento a questo articolo per maggiori informazioni: https://blog.terresquall.com/2021/09/remove-the-admin-bar-on-the-wordpress-admin-backend/

Puoi utilizzare il plugin "AdminBar Editor" per modificare gli elementi della barra di amministrazione: https://wordpress.org/plugins/admin-bar/ oppure, usa il codice seguente per nascondere la barra di amministrazione per gli utenti con ruolo Subscriber.
function wpse_hide_admin_bar(){
if( current_user_can( 'subscriber' ) ) {
show_admin_bar(false);
}
}

Ho fatto una rapida ricerca su questo argomento e non credo sia possibile farlo con una funzione, come detto nel codex.
Nota: Non è più possibile nascondere la Barra degli strumenti quando si visualizzano le Schermate di Amministrazione, ma gli utenti possono disabilitarla sul front-end del sito nella schermata del loro Profilo.
Disabilitarla nel frontend equivale a quello che hai già fatto.
Suggerirei di nasconderla con il css.
#wpadminbar {
display: none;
}
html {
padding-top: 0; // Sposta verso l'alto il contenuto della pagina in base all'altezza della barra
}

Riuscito a farlo con CSS e reso permanente aggiungendo il file CSS nel Child Theme.

La barra di amministrazione esiste ancora con questa "soluzione", solo che non è visibile. Inoltre viene caricata, con impatto sulle prestazioni. Se hai utenti con un minimo di conoscenza degli strumenti di sviluppo web nel browser, la barra di amministrazione torna visibile.

Vedi il mio commento sulla domanda, collegato a https://wordpress.stackexchange.com/questions/77639/disable-the-admin-bar e https://wordpress.stackexchange.com/questions/186071/disable-admin-bar-render-on-plugin-page/186080#186080
