Eliminar la barra de administración para suscriptores
Tengo un sitio de membresías. Necesito desactivar la barra de administración para los suscriptores.
He usado este código:
add_action('after_setup_theme', 'remove_admin_bar');
function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
show_admin_bar(false);
}
}
El cual elimina la barra de administración en el frontend para los suscriptores, pero cuando acceden a su página de perfil wp-admin/profile.php, la barra de administración sigue mostrándose ahí.
Estoy usando el plugin Paid Membership Pro que creo que está haciendo que el código no funcione en el backend para suscriptores.
También he usado este código para eliminar la barra de administración completamente:
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');
Pero este código tampoco funciona.
Solo quiero eliminar la barra de administración para los suscriptores tanto en las páginas del frontend como del backend.
¿Hay algún código específico que me esté faltando? Estoy usando Paid Membership Pro.
Gracias por la ayuda.

Para ocultar la barra de administración a usuarios que no son administradores, añade el siguiente código a tu archivo functions.php
// mostrar barra de administración solo para administradores
if (!current_user_can('manage_options')) {
add_filter('show_admin_bar', '__return_false');
}
// mostrar barra de administración solo para administradores y editores
if (!current_user_can('edit_posts')) {
add_filter('show_admin_bar', '__return_false');
}

Tuve que hacer lo mismo pero mantener la barra para editores y administradores, y eliminarla para otros roles. Lo hice así:
en 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;
}
también en functions.php
// mostrar barra de administración solo para administradores y editores
if (!check_user_role(array('administrator','editor'))) {
add_filter('show_admin_bar', '__return_false');
}

El equipo de PMPro creó un plugin para hacer esto: https://wordpress.org/plugins/hide-admin-bar-from-non-admins/
Incluye el código PHP y CSS necesario para ocultar completamente la barra de administración: 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)
no funciona en las páginas del backend. Tendrás que eliminar los hooks de la barra de administración si quieres eliminarla del backend.
function remove_admin_bar_hooks() {
// Elimina los hooks que renderizan la barra de administración.
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);
// Elimina la clase de la barra de administración de la etiqueta body.
add_filter('body_class',function($wp_classes, $extra_classes) {
// Elimina la clase admin-bar de los arrays si está presente.
return array_diff(
array_merge( $wp_classes, (array) $extra_classes ),
array('admin-bar')
);
},10000,2);
}
Puedes consultar este artículo para más información: https://blog.terresquall.com/2021/09/remove-the-admin-bar-on-the-wordpress-admin-backend/

Puedes usar el plugin "AdminBar Editor" para editar elementos de la barra de administración: https://wordpress.org/plugins/admin-bar/ o bien, utiliza el siguiente código para ocultar la barra de administración para suscriptores.
function wpse_hide_admin_bar(){
if( current_user_can( 'subscriber' ) ) {
show_admin_bar(false);
}
}

Investigué rápidamente sobre esto y no creo que se pueda hacer con una función, como se menciona en el codex.
Nota: Ya no es posible ocultar la Barra de herramientas al ver las Pantallas de Administración, pero los usuarios pueden desactivarla en la parte pública del sitio desde su pantalla de Perfil.
Desactivarla en el frontend tiene el mismo efecto que lo que ya has hecho.
Sugeriría ocultarla con CSS.
#wpadminbar {
display: none;
}
html {
padding-top: 0; // Mueve hacia arriba el contenido de la página por la altura de la barra
}

Logré hacerlo con CSS y lo hice permanente agregando el archivo CSS en el Tema Hijo.

La barra de administración sigue existiendo con esta 'solución', solo que no es visible. Además, se carga, lo que afecta el rendimiento. Si tienes usuarios con un poco de conocimiento sobre las herramientas de desarrollo web en el navegador, la barra de administración vuelve a aparecer.

Consulta mi comentario en la pregunta, vinculado a https://wordpress.stackexchange.com/questions/77639/disable-the-admin-bar y https://wordpress.stackexchange.com/questions/186071/disable-admin-bar-render-on-plugin-page/186080#186080
