Crear roles personalizados
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:
Capability | Super Admin | Administrator | Editor | Author | Contributor | Subscriber |
---|---|---|---|---|---|---|
create_sites | Y | |||||
delete_sites | Y | |||||
manage_network | Y | |||||
manage_sites | Y | |||||
manage_network_users | Y | |||||
manage_network_plugins | Y | |||||
manage_network_themes | Y | |||||
manage_network_options | Y | |||||
upload_plugins | Y | |||||
upload_themes | Y | |||||
upgrade_network | Y | |||||
setup_network | Y | |||||
Capability | Super Admin | Administrator | Editor | Author | Contributor | Subscriber |
activate_plugins | Y | Y (single site or enabled by network setting) | ||||
create_users | Y | Y (single site) | ||||
delete_plugins | Y | Y (single site) | ||||
delete_themes | Y | Y (single site) | ||||
delete_users | Y | Y (single site) | ||||
edit_files | Y | Y (single site) | ||||
edit_plugins | Y | Y (single site) | ||||
edit_theme_options | Y | Y | ||||
edit_themes | Y | Y (single site) | ||||
edit_users | Y | Y (single site) | ||||
export | Y | Y | ||||
import | Y | Y | ||||
Capability | Super Admin | Administrator | Editor | Author | Contributor | Subscriber |
install_plugins | Y | Y (single site) | ||||
install_themes | Y | Y (single site) | ||||
list_users | Y | Y | ||||
manage_options | Y | Y | ||||
promote_users | Y | Y | ||||
remove_users | Y | Y | ||||
switch_themes | Y | Y | ||||
update_core | Y | Y (single site) | ||||
update_plugins | Y | Y (single site) | ||||
update_themes | Y | Y (single site) | ||||
edit_dashboard | Y | Y | ||||
customize | Y | Y | ||||
delete_site | Y | Y | ||||
Capability | Super Admin | Administrator | Editor | Author | Contributor | Subscriber |
moderate_comments | Y | Y | Y | |||
manage_categories | Y | Y | Y | |||
manage_links | Y | Y | Y | |||
edit_others_posts | Y | Y | Y | |||
edit_pages | Y | Y | Y | |||
edit_others_pages | Y | Y | Y | |||
edit_published_pages | Y | Y | Y | |||
publish_pages | Y | Y | Y | |||
delete_pages | Y | Y | Y | |||
delete_others_pages | Y | Y | Y | |||
delete_published_pages | Y | Y | Y | |||
delete_others_posts | Y | Y | Y | |||
delete_private_posts | Y | Y | Y | |||
edit_private_posts | Y | Y | Y | |||
read_private_posts | Y | Y | Y | |||
delete_private_pages | Y | Y | Y | |||
edit_private_pages | Y | Y | Y | |||
read_private_pages | Y | Y | Y | |||
unfiltered_html | Y | Y (single site) | Y (single site) | |||
Capability | Super Admin | Administrator | Editor | Author | Contributor | Subscriber |
edit_published_posts | Y | Y | Y | Y | ||
upload_files | Y | Y | Y | Y | ||
publish_posts | Y | Y | Y | Y | ||
delete_published_posts | Y | Y | Y | Y | ||
edit_posts | Y | Y | Y | Y | Y | |
delete_posts | Y | Y | Y | Y | Y | |
Capability | Super Admin | Administrator | Editor | Author | Contributor | Subscriber |
read | Y | Y | Y | Y | Y | Y |
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: Tanto la creación de nuevos roles con add_role(), como las capacidades añadidas, quedan grabadas en la base de datos y aunque eliminemos las funciones, permanecerán activas en el sitio. Si queremos eliminar un rol o una capacidad determinada, usamos remove_role() y remove_cap(‘capacidad’, true), por ejemplo si queremos quitar la capacidad 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);
O para eliminar completamente el rol:
//Eliminar rol Cliente
$resultado = remove_role('cliente');
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.