Hace tiempo que recomiendo el uso de Members, un fantástico plugin, para gestionar adecuadamente las capacidades y roles de WordPress, pero hay ocasiones en que no es perfecto, tiene sus matices, me explico …
Es bastante corriente modificar, una vez instalado, algún perfil de usuario (siempre estamos hablando de sitios multiusuario) para que, a su vez, pueda agregar otros usuarios. La idea es montar una estructura de colaboradores en la que alguien, normalmente el Editor, no solo revise el contenido creado por usuarios con perfil de Colaborador y Autor, sino que también pueda hacer de "responsable de recursos humanos" y añadir, modificar y borrar perfiles de usuario y sus capacidades.
Pues bien, con Members podemos hacer todo esto pero hay una pega, y es que cuando asignamos a un perfil de usuario la capacidad de crear y/o modificar usuarios también puede crear y/o modificar usuarios con perfil de Administrador, con el peligro que ello supone, sino revisa la tabla de Perfiles y Capacidades de WordPress.
Afortunadamente, todo tiene solución, así que si este es tu caso (el mío si lo es pues gestiono una red de blogs con múltiples perfiles de usuarios), solo tienes que hacer esto:
- Instalas y activas Members
- Eliges (o creas) un perfil de usuario al que le añadirás las capacidades de crear, modificar, borrar, cambiar perfiles y usuarios
- Añades este código al fichero
functions.php
de tu tema activo:
class JPB_User_Caps {
// Add our filters
function JPB_User_Caps(){
add_filter( 'editable_roles', array(&$this, 'editable_roles'));
add_filter( 'map_meta_cap', array(&$this, 'map_meta_cap'),10,4);
}
// Remove 'Administrator' from the list of roles if the current user is not an admin
function editable_roles( $roles ){
if( isset( $roles['administrator'] ) && !current_user_can('administrator') ){
unset( $roles['administrator']);
}
return $roles;
}
// If someone is trying to edit or delete and admin and that user isn't an admin, don't allow it
function map_meta_cap( $caps, $cap, $user_id, $args ){
switch( $cap ){
case 'edit_user':
case 'remove_user':
case 'promote_user':
if( isset($args[0]) && $args[0] == $user_id )
break;
elseif( !isset($args[0]) )
$caps[] = 'do_not_allow';
$other = new WP_User( absint($args[0]) );
if( $other->has_cap( 'administrator' ) ){
if(!current_user_can('administrator')){
$caps[] = 'do_not_allow';
}
}
break;
case 'delete_user':
case 'delete_users':
if( !isset($args[0]) )
break;
$other = new WP_User( absint($args[0]) );
if( $other->has_cap( 'administrator' ) ){
if(!current_user_can('administrator')){
$caps[] = 'do_not_allow';
}
}
break;
default:
break;
}
return $caps;
}
}
$jpb_user_caps = new JPB_User_Caps(); - Guardas los cambios y ¡Ya está!, ahora el nuevo perfil de usuario podrá crear y modificar perfiles pero no podrá crear administradores ni modificar sus perfiles a no ser que, a su vez, sea administrador
Muchas Gracias Portal de Perú ! !
Tengo instalado este plugin en mi Blog y nunca había caído en la posibilidad que me borrasen...
He agregado el código que comentas y funciona 100% ;) Ahora a los demás Usuarios no les aparece el enlace de "Editar admin"
Un Saludo desde Barcelona ! !
PC-SERVEIS, Diseño Web
http://www.pc-serveis.es