En WordPress existen 5 roles predefinidos que, en función de los permisos y sus capacidades para con el Dashboard, podemos ordenar en:

  • Suscriptor (Subscriber): No puede crear ningún tipo de contenido pero puede acceder a zonas o contenidos, programados previamente, a los que no pueda acceder un usuario Público.
  • Colaborador (Contributor): Puede crear sus propias entradas aunque estas quedan en estado pendiente de publicación hasta que las apruebe un Editor o Administrador.
  • Autor (Author): Puede publicar, editar y eliminar sus propias entradas pero no las de otro usuario.
  • Editor (Editor): Puede publicar, editar y eliminar cualquier entrada, tanto propia como de otros usuarios. Además puede crear, editar y eliminar páginas.
  • Administrador (Administrator): Puede gestionar cualquier contenido o configuración del sitio web.
  • Super Administrador (Super Admin): En proyectos Multi-Sitio puede crear y eliminar nuevos proyectos, administrar redes, administrar usuarios de red, etc.

Pero por si estos roles se nos quedasen cortos, podemos añadir tantos roles queramos con las capacidades específicas que necesitemos.

Lo primero será consultar las capacidades que tenemos a nuestra disposición para otorgar a cada uno de los roles que creemos:

CapabilitySuper AdminAdministratorEditorAuthorContributorSubscriber
create_sitesY     
delete_sitesY     
manage_networkY     
manage_sitesY     
manage_network_usersY     
manage_network_pluginsY     
manage_network_themesY     
manage_network_optionsY     
upload_pluginsY     
upload_themesY     
upgrade_networkY     
setup_networkY     
CapabilitySuper AdminAdministratorEditorAuthorContributorSubscriber
activate_pluginsYY
(single site or
enabled by network setting)
    
create_usersYY (single site)    
delete_pluginsYY (single site)    
delete_themesYY (single site)    
delete_usersYY (single site)    
edit_filesYY (single site)    
edit_pluginsYY (single site)    
edit_theme_optionsYY    
edit_themesYY (single site)    
edit_usersYY (single site)    
exportYY    
importYY    
CapabilitySuper AdminAdministratorEditorAuthorContributorSubscriber
install_pluginsYY (single site)    
install_themesYY (single site)    
list_usersYY    
manage_optionsYY    
promote_usersYY    
remove_usersYY    
switch_themesYY    
update_coreYY (single site)    
update_pluginsYY (single site)    
update_themesYY (single site)    
edit_dashboardYY    
customizeYY    
delete_siteYY    
CapabilitySuper AdminAdministratorEditorAuthorContributorSubscriber
moderate_commentsYYY   
manage_categoriesYYY   
manage_linksYYY   
edit_others_postsYYY   
edit_pagesYYY   
edit_others_pagesYYY   
edit_published_pagesYYY   
publish_pagesYYY   
delete_pagesYYY   
delete_others_pagesYYY   
delete_published_pagesYYY   
delete_others_postsYYY   
delete_private_postsYYY   
edit_private_postsYYY   
read_private_postsYYY   
delete_private_pagesYYY   
edit_private_pagesYYY   
read_private_pagesYYY   
unfiltered_htmlYY (single site)Y (single site)   
CapabilitySuper AdminAdministratorEditorAuthorContributorSubscriber
edit_published_postsYYYY  
upload_filesYYYY  
publish_postsYYYY  
delete_published_postsYYYY  
edit_postsYYYYY 
delete_postsYYYYY 
CapabilitySuper AdminAdministratorEditorAuthorContributorSubscriber
readYYYYYY

Para crear un nuevo rol, insertamos el siguiente código en el archivo de funciones del tema activo (functions.php) o en nuestro propio plugin de funciones. Vamos a crear por ejemplo, un rol llamado Cliente:

$resultado = add_role(
    'cliente',
    __( 'Cliente' ),
    array(
        'read'         => true,  // true allows this capability
        'edit_posts'   => false,
        'delete_posts' => false,
    )
);

En el array añadimos las principales capacidades por defecto:

  • read (lectura como verdarero).
  • edit_posts (editar entradas como falso).
  • delete_posts (borrar entradas como falso).

A continuación añadimos las capacidades extras para el nuevo rol:

//Actualizar capacidades Cliente
function capacidades_cliente(){
    $role = get_role('cliente');
    $role->add_cap('publish_posts', true);
    $role->add_cap('edit_posts', true);
    $role->add_cap('delete_posts', true);
}
add_action('init', 'capacidades_cliente', 11);

Esta función añade al Rol Cliente las capacidades para publicar entradas, editarlas y eliminarlas, pero solamente sus propias entradas, para afectar a las entradas de otros usuarios habría que usar la capacidades «publish_others_posts», «edit_others_posts» y «delete_others_posts».

A TENER EN CUENTA: Las capacidades añadidas a un rol se quedan grabadas en la base de datos y aunque eliminemos la funcion capacidades_cliente(), ese rol seguirá disfrutando de las capacidades otorgadas.

Si queremos eliminar una capacidad determinada a un rol, usamos remove_cap(‘capacidad’, true), por ejemplo si queremos quitar la capaidad de eliminar entradas, crearíamos la función:

//Eliminar capacidades Cliente
function eliminar_capacidades_cliente(){
   $role->remove_cap('delete_posts', true);
}
add_action('init', 'eliminar_capacidades_cliente', 11);

Y una vez que se ejecute por primera vez, la capacidad quedará eliminada de la base de datos.

Espero que este post os sirva para sacar más partido a vuestros usuarios, definiendo exactamente aquellas funciones o permisos que queráis otorgarles.