21. Usuarios

¿Qué es un usuario?

Cada usuario de WordPress tiene, como mínimo, un nombre de usuario, contraseña, y dirección de correo electrónico. Una vez se crea una cuenta de usuario, dicho usuario se puede loggear en la administración de WordPress o loggear por programación para acceder a las funciones y datos de WordPress.

Los usuarios son roles asignados, y cada rol tiene un conjunto de permisos. Puedes crear nuevos roles con su propio conjunto de permisos. Los permisos personalizados se pueden crear y asignar a roles existentes o nuevos.

Principio de menos privilegio

El principio de menos privilegio se refiere a la práctica de dar a una cuenta de usuario sólo los privilegios que son esenciales para el trabajo de ese usuario.

En WordPress, los desarrolladores pueden tomar ventaja de los roles de usuario limitando a las personas o a los scripts a realizar sólo aquellas acciones que tienen permitidas hacer y no más.

Esto habilita al administrador a crear registros con un nivel muy básico (subscriber) de acceso para los nuevos usuarios, sin preocuparse de que lo que hagan no sea correcto.

 

Crear y gestionar usuarios

Insertar usuarios

Para añadir un usuario puedes usar tanto wp_insert_user como wp_create_userwp_create_user sólo crea un usuario, y no permite gestionar ningún campo de usuario adicional. wp_insert_user permite rellenar todos los campos de usuario.

wp_insert_user( $userdata )

El parámetro $userdata es requerido, y puede ser una matriz, stdClass o un objeto WP_User.

Si se crea el usuario sin problemas, devuelve el id de dicho usuario; en otro caso, devuelve un objeto WP_Error.

Ejemplo

La matriz $userdata puede contener los siguientes datos:

  • ID. Un entero que será utilizado para actualizar un usuario existente. Sin filtro asociado.
  • user_pass. Cadena que contiene la contraseña de texto plano para el usuario. ‘pre_user_pass’ es su filtro asociado.
  • user_login. Cadena que contiene el nombre de usuario del usuario para ingresar. El filtro asociado es ‘pre_user_login’.
  • user_nicename. Cadena que contiene un nombre amigable para el usuario. Por defecto, es el nombre de usuario del usuario. El filtro asociado es ‘pre_user_nicename’.
  • user_url. Cadena que contiene la URL del sitio web del usuario. El filtro asociado es ‘pre_user_url’.
  • user_email. Cadena que contiene la dirección de correo electrónico del usuario. El filtro asociado es ‘pre_user_email’.
  • display_name. Cadena que será mostrada en el sitio. Por defecto es el nombre de usuario del usuario. El filtro asociado es ‘pre_user_display_name’.
  • nickname. El nick del usuario, por defecto el nombre de usuario del usuario. El filtro asociado es ‘pre_user_nickname’.
  • first_name. El nombre de pila del usuario. Filtro ‘pre_user_first_name’.
  • last_name. Apellido del usuario. Filtro ‘pre_user_last_name’.
  • description. Cadena con contenido acerca del usuario. Filtro ‘pre_user_description’.
  • rich_editing. Cadena para si habilitar el editor enriquecido o no. Falso si no está vacía. Sin filtro.
  • user_registered. Fecha de registro del usuario. Formato: Y-m-d H:i:s. Sin filtro.
  • role. Cadena utilizada para seleccionar el rol del usuario. Sin filtro.
  • jabber. Cuenta del usuario en Jabber. Sin filtro.
  • aim. Cuenta del usuario en AOL IM. Sin filtro.
  • yim. Cuenta del usuario en Yahoo IM. Sin filtro.

Notas:

  • $wpdb. Capa de base de datos de WordPress.
  • apply_filters(). Llama a los filtros para la mayoría de los campos $userdata con el prefijo ‘pre_user’.
  • do_action(). Llama al gancho ‘profile_update’ al actualizar la id de usuario.
  • do_action(). Llama al gancho ‘user_register’ al crear un nuevo usuario dando la id.
  • Si no hay ID, igualmente se creará el nuevo usuario. Si pasas una ID, el usuario con dicha ID se actualizará, y los siguientes campos se actualizarán si están en la matriz $userdata (de otra manera, quedarán null): first_name, last_name, nickname, description, rich_editing, comment_shortcuts, admin_color, use_ssl, show_admin_bar_front.
  • Al realizar una operación de actualización utilizando wp_inser_user, el campo user_pass debería ser la contraseña hashed y no la contraseña de texto plano.

 

Crear usuarios

wp_create_user( $username, $password, $email )

La función wp_create_user permite insertar un nuevo usuario dentro de la base de datos de WordPress. Utiliza la clase $wpdb para ‘escapar’ los valores de las variables, preparándolas para su inserción en la base de datos. Entonces, la función PHP compact() se utiliza para crear una matriz con dichos valores. Para crear un usuario con parámetros adicionales, utilizar wp_insert_user().

Ejemplo:

Parámetros:

  • $username. Cadena requerida con el nombre de usuario del usuario a crear. Por defecto, none.
  • $password. Cadena requerida. La contraseña del usuario a crear. Por defecto, none.
  • $email. Cadena opcional, con la dirección de correo electrónico del usuario a crear. Por defecto, none.

Si no hay ningún problema, devuelve el ID del usuario creado. En caso de fallo, la función retorna un objeto de error, con estos posibles mensajes:

  • empty_user_login. No se puede crear un usuario sin nombre.
  • existing_user_login. El nombre de usuario ya está registrado.
  • existing_user_email. La dirección de correo electrónico ya está registrada.

 

Actualizar usuarios

wp_update_user( $userdata )

Esta función actualiza un usuario en la base de datos. Esta actualización puede contener múltiples campos de los metadatos del usuario en forma de matriz.

Para actualizar un sólo campo de los metadatos de usuario, puedes utilizar la función update_user_meta().

Para crear un usuario nuevo, utilizar wp_insert_user().

Si la contraseña del usuario actual es cambiada, entonces las cookies serán reinicializadas.

Ejemplo:

 

Borrar usuarios

wp_delete_user( $id, $reassign )

Elimina el usuario y, opcionalmente, reasigna sus posts y enlaces a otro usuario. Si el parámetro $reassign no está asignado a un id de usuario, entonces todos los posts se borrarán de aquel usuario. La acción ‘delete_user’ que se pasa cuando el usuario está siendo borrado, se ejecuta después que los posts son reasignados o eliminados. Los datos meta del usuario también serán borrados.

NOTA:

Si quieres utilizar esta función en un plugin debes incluir el archivo wp-admin/includes/user.php en tu función de plugin, sino mostrará un error ‘call to undefined function’.

 

Trabajar con los metadatos de usuarios

La tabla users de WordPress contiene muy poca información acerca de los usuarios, y no puede acoger más. Por esa razón existe la tabla usermeta. Por defecto, contiene cosas como First Name, Last Name, Nickname, etc. Cualquier cosa se puede ubicar en ella, simplemente relacionándola mediante user_id.

Existen dos escenarios principales diferentes para gestionar las User Meta. Una es vía campos de formulario personalizados en la página Perfil Usuario, y la otra es mediante programación con las funciones adecuadas.

 

Añadir Metadatos de Usuario mediante formulario

Si simplemente quieres proveer una Interfaz de Usuario para que los usuarios del sitio puedan actualizar una meta opción específica, puedes utilizar un código similar al siguiente:

Observa que hay dos etiquetas de acción. show_user_profile sirve para mostrar el formulario en tu propio perfil, y edit_user_profile sirve para mostrarlo en cualquier otro.

 

Salvar los datos

Simplemente creando el formulario no se guardan los datos. Para ello, debes utilizar el siguiente código:

Observa que update_usermeta se utiliza siempre que haya la posibilidad de que el valor no exista previamente. Correcto, lo creará si no existe.

Nota también las dos funciones add_action. Similar al código anterior a este, se aplica tanto a tu página de perfil, como a la de cualquier otro.

 

Añadir datos de usuario mediante programación

Existen dos maneras de añadir metadatos de usuario mediante programación: add_user_meta()update_user_meta().

add_user_meta( $user_id, $meta_key, $meta_value, $unique )

 

Recuperar y mostrar datos del Usuario

get_user_meta( $user_id, $key, $single )

Si sólo pasas el $user_id, devolverá todos los datos en una matriz.

Si pasas el $user_id y la $key correspondiente a un dato, devuelve el valor de esa $key en una matriz.

Si lo pasas todo y $single es true, devolvera el valor bien en una cadena o en un entero, al margen de que el valor guardado es en si mismo una matriz u objeto.

 

Roles y permisos

Roles y permisos son dos características importantes que te permiten extender lo que pueden hacer los usuarios con WordPress. Un rol es como se llamará un usuario y los permisos son lo que el usuario puede ver y hacer.

 

¿Qué es un rol?

Un rol es lo que te da el poder de controlar lo que un usuario verá en su panel de administrador. En WordPress hay seis roles por defecto: Super Admin, Administrator, Editor, Author, Contributor, y Subscriber. Pero se pueden crear más roles y pueden funcionar de diferentes maneras. Ello te da más control de lo que ven tus usuarios.

 

Crear nuevos roles

En adición a los roles existentes, puedes crear nuevos roles, y asignar permisos personalizados a los mismos. A continuación código para crear un rol nuevo:

Y ya está. Has creado tu primer rol en WordPress. Tu rol ahora será como tú quieras.

 

Manipular permisos

El permiso indica a un rol de usuario qué puede hacer (editar artículos, publicar artículos, etc.). Los permisos pueden también añadirse para Custom Post Types (edit_your_cpt, read_your_cpt, etc.).

Este código da al rol contributor la posibilidad de editar posts de otros con el poder de los permisos de WordPress.

También es posible añadir tus propios permisos personalizados a cualquier rol, tanto los del núcleo como los nuevos personalizados.

 

Utilizar permisos

WordPress tiene dos funciones principales para chequear permisos: current_user_canuser_can.

current_user_can( $capability, $args )

Esta función chequea los permisos en contra del usuario actualmente registrado. Esto lo utilizará un plugin o tema para planear sobre cómo permitir o restingir el acceso a las áreas de administración o el contenido del front-end. No necesita un id de usuario, ya que se basa en el usuario actual.

Los $args proporcionan información adicional sobre el permiso.

user_can( $user, $capability )

Esta función permite chequear los permisos de un usuario dado. Es más limitada que la anterior, ya que no acepta argumentos para los permisos.

 

Multisitio

La función current_user_can_for_blog( $blog_id, $capability ) es exactamente como current_user_can, salvo que tiene el blog_id y no acepta argumentos. Se utilizar para saber si el usuario actual tiene un permiso dado en un blog específico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *