Usuarios en WordPress: Funciones y Plugins útiles

Cuando tienes que realizar una web utilizando WordPress en el que todo gira alrededor de los usuarios y no de las categorías o de las páginas, como en una web normal, necesitaremos lidiar con un aspecto de WordPress que quizás esté menos desarrollado que otros.

Como sabéis, en WordPress tenemos varios tipos de roles preestablecidos que permiten al dueño de una web determinar lo que cada usuario puede y no puede hacer:

  • Super Administrador – En el caso de una red de blogs tiene acceso a todas las opciones de administración de dicha red.
  • Administrador: Tiene acceso a todas las opciones de administración de la web
  • Editor: Puede publicar y gestionar entradas y páginas tanto suyos como ajenos.
  • Autor: Puede publicar y gestionar sus propias entradas.
  • Colaborador: Puede escribir y gestionar sus entradas, pero no publicarlas.
  • Subscriptor: Sólo puede gestionar su perfil.

Vamos a ver una serie de funciones prácticas que nos pueden ayudar a mejorar las posibilidades de nuestro tema a la hora de manejar los usuarios de nuestra web.

Modificar el perfil del Usuario

Una vez demos de alta a un Usuario quizás veamos que su perfil se nos queda un poco corto. Quizás necesitamos incorporar nuevos campos y opciones, o una imagen (un logo, por ejemplo), o quizás no queramos que pueda cambiar su contraseña.

Para ello vamos a tener que abrir el archivo functions.php de nuestro tema. Vamos a ver distintas opciones posibles, aunque hay muchas más (os animo a aportarlas en los comentarios!):

Ejemplo 1: Vamos a añadir dos nuevos campos personalizados al perfil de usuario. Para hacerlo lo más genérico posible uno será para elegir entre dos niveles (Nivel 1 o Nivel 2) y el otro será para introducir un campo de texto, por ejemplo el nombre de una imagen que subamos a través de Multimedia (por ejemplo, un logo). para ello me he basado es este artículo de Justin Tadlock.

Vamos a suponer que no queremos que el usuario pueda cambiar el Nivel, que sólo lo pueda cambiar el administrador. Entonces haríamos:

Vale, ya tenemos que algunos usuarios son de Nivel 1 y otros de Nivel 2. ¿Cómo usarlo en nuestro tema? Sabiendo el ID del usuario podemos obtener el “Nivel” del mismo gracias a la función de WordPress get_the_author_meta():

También puede ser que queramos obtener fuera del loop el “Nivel” que hemos creado (o cualquier otro campo) para añadir, por ejemplo, un “id” a la etiqueta body que nos ayude a dar estilos diferentes según a qué opción pertenezca el usuario:

Otra función interesante de WordPress es get_userdatabylogin. Sabiendo el nombre de usuario podemos acceder a los valores de su perfil:

ACTUALIZACION: La función get_userdatabylogin se deja de utilizar a partir de WordPress 3.3.

Y por ejemplo si queremos obtener una lista de usuarios que sean de Nivel 1 (por seguir con el ejemplo), con su URL y su nombre, entonces podemos usar la función get_users(), que nos permite incluir en sus parámetros el campo personalizado que hemos creado, y la función que ya hemos visto get_userdatabylogin():

Ejemplo 2: Vamos a eliminar algunos campos del perfil de usuario que pueden sobrarnos. No sé cómo eliminar gran cantidad de campos como no sea a través de Javascript ocultándolos. Como eso no me gusta demasiado no lo voy a poner aquí. Los que sí sé cómo quitar:

Ejemplo 3: Que sólo el Administrador pueda cambiar la contraseña de los autores. Una vez insertado este código al autor no le saldrá el campo de Contraseña y por lo tanto no podrá cambiarla.

Los usuarios en la base de datos

Si echas un vistazo a la base de datos de tu instalación de WordPress verá que los datos de los usuarios se encuentran en dos tablas (vamos a suponer que el prefijo que has usado es wp_, aunque esto no sea recomendable):

  • wp_users: Donde tendrás una lista de los usuarios de tu web con los siguientes campos:
    • ID – El ID del usuario
    • user_login – El nombre de usuario
    • user_pass – La contraseña
    • user_nicename – Es la versión limpia del user_login, que se emplea por ejemplo en las URLs.
    • user_email – El email del usuario
    • user_url – La web del usuario
    • user_registered – Fecha de registro
    • user_activation_key – Utilizado para verificar la cuenta al borrar la contraseña
    • user_status – No parece que se use para nada…
    • display_name – El nombre introducido al dar de alta al usuario, normalmente el que queremos que aparezca publicamente.
  • wp_usermeta: Almacena la información de cada usuario, llamada meta data. Tiene los siguientes campos:
    • umeta_id: El ID del campo.
    • user_id: El ID del usuario.
    • meta_key: El nombre del campo.
    • meta_value: El valor del campo.

Por ejemplo, los campos personalizados anteriores (“nivel” e “imagen”), se grabarán en wp_usermeta, siendo meta_key “nivel” y meta_value “Nivel1″ (por ejemplo).

Hay ocasiones en que las funciones de WordPress se nos pueden quedar limitadas y necesitemos acceder directamente a la base de datos. Veréis que esto no es muy difícil. En este artículo podéis encontrar más información.

Cambios en la lista de Usuarios: Añadiendo los campos personalizados

Hemos añadido nuevos campos en el perfil de usuario (nivel e imagen). Cuando hacemos click en Usuarios y nos salen todos los usuarios registrados en la web quizás queramos incluir los nuevos campos que hemos añadido en dicha tabla. Vamos a ver cómo hacerlo (como veréis he añadido a la tabla el ID del usuario, que a veces puede ser interesante verlo de forma rápida):

Filtrar por usuario las entradas

Si tenéis muchos usuarios diferentes echaréis en falta que en la tabla de entradas se puedan filtrar estas por el Autor. Para ello pegamos este código en nuestro archivo functions.php:

Cambios en las capacidades de un determinado rol de usuario

Ejemplo 1: Que el Colaborador pueda subir imágenes. Una crítica que se suele hacer al rol de Colaborador es que no puede subir imágenes. Eso es facilmente modificable:

Ejemplo 2: Que el Colaborador pueda editar sus entradas. Otra limitación de los Colaboradores es que no pueden editar sus entradas. Podemos también modificar esto manteniendo la necesidad de que una vez editados sean de nuevo enviados para ser autorizados por el Administrador.

Ejemplo 3: Que el Colaborador reciba un email cuando se publique su entrada

Ejemplo 4: Que cada autor sólo pueda ver sus entradas

Ejemplo 5: Que sólo el administrador pueda ver los avisos de actualizaciones

Saber si un autor tiene o no entradas

Imaginémonos que tenemos una lista de autores pero no queremos que salga ninguno que no tenga entradas. Con esta función podemos hacerlo, pasándole el ID del usuario y de manera opcional el tipo de entrada, que puede ser un tipo de entrada personalizado.

Algunos plugins útiles

Para terminar, aparte de las funciones que os he puesto, quizás os sean de utilidad estos plugins:

  • Para enviar un email cuando un Colaborador ha enviado una entrada para revisión: WP Status Notifier
  • Para añadir una foto al perfil de usuario: User Avatar
  • Igual que el anterior: User Photo
  • Plugin para modificar los roles de los usuarios con funcionalidades adicionales: Members
  • Plugin para cambiar el permalink de los usuarios. Si quieres cambiar “authors” por cualquier otra cosa: Custom Author Base

27 comentarios en “Usuarios en WordPress: Funciones y Plugins útiles

  1. Gracias juan!, no sabes si habria manera de mostrar el contenido de un campo pero que no sea editable, ??

    por ejemplo en mi worpress manejo lista de alumnos de un curso en el que quiero que al ingresar cada uno con su cuenta de tipo “suscriptor” puedan ver una lista de sus materias y calificaciones al final de su perfil, esto lo logre usando cimy extra fields, hasta ahy todo perfecto pero lo malo es que el campo de cada nota de las materias del alumno puede ser modificado por el mismo alumno desde su perfil,..
    por eso necesito que el campo sea visible pero no editable…

    pdata. las notas de todos los alumnos las importo por csv, siendo adm claro..

    Espero tu ayuda, Gracias d nuevo

    • Hola Cristian,

      Puedes poner un condicional en función de si es un administrador el que está mirando o no. Si es administrador pones el input y si no lo es simplemente muestras el dato.

        • Hola Cristian,

          Es que no sé cómo es tu código para crear los campos personalizados. Usas un plugin, por lo cual será algo más complejo ya que tendrás que modificar el código del plugin y tener cuidado con las actualizaciones del mismo…. En el plugin tendrás que buscar el código donde está el formulario con los inputs para introducir los datos. Si pones un condicional de tal manera que cuando el usuario no sea administrador en vez de mostrar un input simplemente muestre el valor de dicho campo lo tendrías solucionado.

  2. Hola. Te pido disculpas porque esta pregunta no la debería realizar en este hilo. Pero hace semanas que busco un plugin WP que discrimine el contenido multimedia de cada usuario.
    Por ejemplo si user_1 sube el fichero file_1 que user_2 no pueda ver el fichero file_1 y viceversa.-

    Espero haber sido claro. desde ya muchas gracias

    • Hola Franco,

      Yo suelo usar una función (en functions.php) para que cada usuario pueda ver sólo sus posts. A ver si te sirve:

  3. Tengo dos sitios que usan wordpress , cada uno con sus respectivos usuarios como puedo conectar ambas base de datos para que los usuarios se registrados no se tengan que volver a registrar en el otro sitio?
    Te agradeceria la ayuda.

    Saludos

  4. Hola Juan ante todo gracias por esta información tan útil. Juan tengo un gran problema con la administración de usuarios en wordpress, cuando le doy al botón de usuarios me sale esto: “Parse error: syntax error, unexpected $end in /home/content/28/10025528/html/kurenay/wp-admin/includes/class-wp-users-list-table.php on line 157″, esto me impide gestionar los usuarios, ojala me pudieras echar una mano con esto o por lo menos darme alguna indicación, que me permita dar con el origen del problema. muchas gracias

    • Hola Mauricio,

      Difícil saber qué pasa, pero debes tener algún error de código en algún sitio. Revisa todo lo que hayas hecho que afecte a los usuarios.

  5. Hola, muchas gracias por la información, yo nisiquiera me había fijado que los colaboradores no podian subir imágenes:) pero gracias a ustedes ya resolví varias cosas, quisiera también hacer una pregunta, ¿cómo podría quitar del escritorio de los colaboradores la parte donde dice “Estás usando WordPress 3.XX”?

  6. A mi lo que me pasa es que tengo un blog con cientos de autores que peueden crear posts, pero también pueden borrarlos y eso no me gusta para nada, me gustaría saber con que código quito la posibilidad de que el autor no pueda borrar sus posts.

    PD: También quisiera saber como incorporaste en esta zona de comentarios la barra par aponer subrayado colores, etc.

    • Hola,

      Prueba esto a ver. Suponiendo que sean “contributor”

  7. Hola mira tengo un blog que tiene varios usuarios y quiero que todos ellos salgan en una sola página, y al dar clic salga toda su información ingresada por ellos porfa si me ayudas con algún plugin

    • Hola Julio,

      No te hace falta un plugin, puedes usar la función . Fíjate al pie de página que vienen otras funciones relacionadas con los autores que también te pueden ayudar.

  8. Hola Juan, buen dia:
    Utilizo WPMultisite y tengo 1 sitio con 65 mulisites, el problema radica en que los administradores de cada multisitio al editar sus entradas; WordPress elimina los cierres de etiquetas

    . Eh instalado plugins y editado el functions varias ocasiones para resolver el problema pero aun no descubro algo que pueda ayudarme. Si tuvieras una idea de como reslverlo o si es posible darle atributos de escritura a un administrador te lo agradecere mucho. Saludos.

    • Hola Pedro,

      Qué tipo de etiquetas elimina? No lo he entendido muy bien, perdona. ¿Por ejemplo el cierre de un div?

      • Hola Juan, gracias por responder, si, cierra todo tipo de etiquetas </div> </ol> </ul> </li> por ejemplo:

        Lista

        al actualizar o publicar, queda de esta forma:

        Lista

        • Tienes instalado algún plugin que lo elimine? El editor es el que viene con WordPress o tienes algún plugin que lo sustituye?

          • No, el editor es el que viene con wordpress, estos son los plugins que tengo instalados: Akismet, Audio player, Capability Manager, Chat Lite, clima, CollabPress, Exec-PHP, FLV Embed, Good Old Gallery, Hello Dolly, Image Widget, jQuery Lightbox For Native Galleries, Marquee-Plus, Meteor Slides, Modal Dialog, Quizzin, Role Manager, Share and Follow, ShowBox, Twitter for WordPress, Twitter Widget Pro, Viper’s Video Quicktags, Widget Context, WordPress Tabs Slides, WP-PageNavi, WP Carousel, WP Featured Content Slider, [iframe]. No todos estan activos, solo algunos en diferentes sitios, los que estan permanentes y en todos los sitios son:Exec-PHP, Marquee-Plus y WP Featured Content Slider.

          • No conozco muchos de los plugins… Lo que está claro es que algo tienes que elimina los cierres…. ¿No tienes una versión en local para ir probando sin cada plugin?

  9. Hola Juan, veo que dominas bastante el tema de usuarios en wordpress y yo tengo un problema gordo que llevo semanas sin poder darle solución.

    Estoy creando una web con registro de usuarios a los que entreno para carreras deportivas, cada uno de ellos tiene un menú independiente; pero necesito que todos desde su menú tengan una página tipo diario, con un área de texto vacía que ellos puedan ir rellenando y se actualice cada vez que añaden algo más.

    Aunque el diseño que verían de la página sería igual para todos, el contenido que escriban debería ser posible verlo solo por el propio usuario que lo escribe.

    He probado con el atributo contenteditable de html5 pero luego no se como se iría guardando el contenido cada vez que el usuario escriba y tampoco sé si es la mejor opción para esto.

    Espero que se me haya entendido, muchas gracias de antemano.

    • Hola Dailos,

      Si no quieres complicarte mucho la vida lo que te recomiendo es que los formularios para subir los contenidos (el diario del autor) lo subas con un plugin como Gravity Forms. Ya sé que es de pago, pero es uno de los mejores plugins que hay para WordPress. De esta manera los usuarios registrados podrán subir posts que almacenarás con el ID del autor. Una vez el usuario se ha logueado es muy sencillo obtener su ID:

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">