Los roles y las capacidades son dos aspectos importantes de WordPress que permiten controlar los privilegios de los usuarios.
WordPress almacena los Roles y sus Capacidades en la tabla options
bajo la clave user_roles
.
Roles #Roles
Un rol define un conjunto de capacidades para un usuario. Por ejemplo, lo que el usuario puede ver y hacer en su dashboard.
Por defecto, WordPress tiene seis roles:
- Super Admin
- Administrador
- Editor
- Autor
- Contribuyente
- Suscriptor
- ¡No aconsejamos eliminar los roles de Administrador y Super Administrador!
- Asegúrate de mantener el código en tu plugin/tema ya que futuras actualizaciones de WordPress pueden añadir estos roles de nuevo.
- Ejecuta
update_option('default_role', YOUR_NEW_DEFAULT_ROLE)
ya que estarás eliminandosubscriber
que es el rol por defecto de WP.
Se pueden añadir más roles y eliminar los roles por defecto.
Añadir Roles #Añadir Roles
Añadir nuevos roles y asignarles capacidades con add_role().
function wporg_simple_role() {add_role('simple_role','Simple Role',array('read' => true,'edit_posts' => true,'upload_files' => true,),);}// Add the simple_role.add_action( 'init', 'wporg_simple_role' );
Expandir el código fuente completoColapsar el código fuente completo
¡Después de la primera llamada a add_role(), el rol y sus capacidades se almacenarán en la base de datos!
Las llamadas secuenciales no harán nada: incluyendo la alteración de la lista de capacidades, que podría no ser el comportamiento que estás esperando.
Nota:
Para alterar la lista de capacidades de forma masiva: elimina el rol usando remove_role() y añádelo de nuevo usando add_role() con las nuevas capacidades.
Asegúrate de hacerlo sólo si las capacidades difieren de lo que esperas (es decir, condiciona esto) o degradarás el rendimiento considerablemente!
Top
Quitando Roles #Removing Roles
Quita roles con remove_role().
function wporg_simple_role_remove() {remove_role( 'simple_role' );}// Remove the simple_role.add_action( 'init', 'wporg_simple_role_remove' );
Después de la primera llamada a remove_role(), ¡el rol y sus capacidades serán eliminados de la base de datos!
Las llamadas secuenciales no harán nada.
Si estás eliminando los roles por defecto:
Top
Capacidades #Capabilities
Las capacidades definen lo que un rol puede y no puede hacer: editar posts, publicar posts, etc.
Nota:
Los tipos de post personalizados pueden requerir un cierto conjunto de Capacidades.
Top
Añadir Capacidades #Adding Capabilities
Puedes definir nuevas capacidades para un rol.
Utiliza get_role() para obtener el objeto rol, luego utiliza el método add_cap()
de ese objeto para añadir una nueva capacidad.
function wporg_simple_role_caps() {// Gets the simple_role role object.$role = get_role( 'simple_role' );// Add a new capability.$role->add_cap( 'edit_others_posts', true );}// Add simple_role capabilities, priority must be after the initial role definition.add_action( 'init', 'wporg_simple_role_caps', 11 );
Es posible añadir capacidades personalizadas a cualquier rol.
Bajo el administrador por defecto de WordPress, no tendrían ningún efecto, pero se pueden utilizar para la pantalla de administración personalizada y las áreas del front-end.
Top
Eliminación de capacidades #Removing Capabilities
Puedes eliminar capacidades de un rol.
La implementación es similar a la de Añadir Capacidades con la diferencia de utilizar el método remove_cap()
para el objeto rol.
Top
Usando Roles y Capacidades #Usando Roles y Capacidades
Top
Obtener Rol #Obtener Rol
Obtener el objeto rol incluyendo todas sus capacidades con get_role().
get_role( $role );
Top
User Can #User Can
Comprueba si un usuario tiene un rol o capacidad especificada con user_can().
user_can( $user, $capability );
Hay un tercer argumento no documentado, $args, que puede incluir el objeto contra el que se debe realizar la prueba.
Por ejemplo, pasar un ID de post para probar la capacidad de ese post específico.
Top
El usuario actual puede #El usuario actual puede
current_user_can() es una función que envuelve a user_can() utilizando el objeto usuario actual como el parámetro $user
.
Usa esto en escenarios donde las áreas de back-end y front-end deben requerir un cierto nivel de privilegios para acceder y/o modificar.
current_user_can( $capability );
Superior
Ejemplo #Ejemplo
Aquí tienes un ejemplo práctico para añadir un enlace Editar en el en un archivo de plantilla si el usuario tiene la capacidad adecuada:
if ( current_user_can( 'edit_posts' ) ) {edit_post_link( esc_html__( 'Edit', 'wporg' ), '<p>', '</p>' );}
Top
Multisite #Multisite
La función current_user_can_for_blog() se utiliza para comprobar si el usuario actual tiene un determinado rol o capacidad en un blog específico.
current_user_can_for_blog( $blog_id, $capability );
Top