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
¡Que lo disfrutes!