registration form

Cómo agregar campos personalizados al perfil de usuario de WordPress

WordPress nos da la opción de permitir que los usuarios se registren en nuestro sitio (en Ajustes => Generales => Cualquiera puede registrarse).

Por defecto sólo pide dos campos básicos: “Nombre de Usuario” y “Correo electrónico”. Vamos a ver cómo agregar campos personalizados al perfil de usuario tanto en el formulario de registro cómo en la administración de usuarios en el back-end, por si somos nosotros mismos los que queremos dar de alta usuarios manualmente desde el panel de control.

Para la gestión de usuarios WordPress utiliza dos tablas en la base de datos wp_users (para la información básica) y wp_usermeta (para datos adicionales). Es en ésta última tabla donde se almacenará nuestra información adicional.

Lo primero que hay que entender es cómo y dónde se maneja la información relativa a los usuarios. WordPress gestiona usuarios en diferentes pantallas, y en todas ellas vamos a ver cómo agregar, validar y guardar los nuevos campos personalizados al perfil de usuario:

  • Front-end: Formulario de registro (action: register_form)
  • Back-end: Tu perfil (action: show_user_profile)
  • Back-end: Editar usuario (action: edit_user_profile)
  • Back-end: Añadir nuevo usuario: WordPress no dispone de ningún action, veremos cómo incluirlo mediante jQuery

Vamos a verlo todo con un ejemplo práctico dónde agregaremos los campos población, provincia y teléfono al perfil de usuario de WordPress.

formulario registro

 

Agregar campos personalizados al perfil de usuario en el formulario de registro del front-end:

Añadiremos 3 funciones en nuestro archivo functions.php, la primera para añadir los campos al formulario de registro, la segunda para validar los datos y la tercera para guardarlos.

 

Agregar campos personalizados al perfil de usuario en el back-end (Tu perfil y Editar usuario):

Vamos a utilizar dos actions: show_user_profile y edit_user_profile, para añadir nuestros campos personalizados al perfil de usuario. Como antes, vamos a crear una función para agregar los campos al formulario de Tu perfil y Editar usuario, y reutilizaremos la función creada anteriormente (save_user_fields()) para guardar los datos:

 

Agregar campos personalizados al perfil de usuario en el back-end (Añadir Nuevo Usuario):

Ésta parte tiene un poco más de miga porque WordPress no dispone a día de hoy de ningún action para introducir nuestros campos personalizados en el formulario de Añadir Nuevo Usuario.

¿Qué alternativas tenemos? Añadiremos nuestros campos mediante jQuery. Crearemos al final de la tabla unas nuevas filas con los inputs correspondientes de nuestros campos. Podemos crear un archivo js en una carpeta “/js” dentro de nuestro tema, cargarlo en el back-end de la siguiente manera:

Y en nuestro archivo “custom-users-fields.js” agregamos éstas líneas:

Para el guardado de nuestros datos no hace falta crear ninguna función adicional ya que nos vale con el action que hemos utilizado antes: add_action(‘user_register’, ‘save_user_fields’);

Nota

Si deseamos que uno de estos campos sea obligatorio, basta con añadir la clase form-required al <tr> de nuestro campo, como en nuestro ejemplo hemos hecho con el campo Población.

¿Me invitas a un café?
Si te ha gustado el blog o algún artículo en concreto te ha ayudado a resolver una duda o problema que tenías…¿me invitas a un café?

Puede que también te interese

Cómo agregar reCaptcha a un formulario de contacto personalizado en WordPress sin Plugins
Vamos a ver cómo podemos agregar reCaptcha a un formulario personalizado en WordPress sin plugins, es decir, en un desarrollo a medida. Para instalar la…
Lazy load en WordPress para mejorar la velocidad de carga de tu web
Lazy load, carga diferida o carga perezosa es una técnica que consiste en retrasar la carga de ciertos tipos de contenido como imágenes, vídeos y frames.…
Seguridad WordPress: cambiar el usuario y contraseña periódicamente
Una de los axiomas en seguridad es tener un usuario y contraseña seguros. No obstante, se recomienda cambiar la contraseña periódicamente o cada cierto tiempo…
Cómo cambiar WordPress Multisite de subdominios a subdirectorios ó viceversa
Si alguna vez has instalado WordPress Multisite sabrás que lo primero que te pide es que tomes una decisión: subdominios o subdirectorios. Por favor, elige…




  • Juan C Boly

    gracias por compartirlo. He seguido los pasos pero no logro que el nuevo usuario reciba el mail para acceder al sitio…
    puedes indicarme qué estoy haciendo mal o bien los errores mas comunes para mi caso…gracias

  • Alejandro

    Hola buen post. Tengo el siguiente problema, yo quisiera que la informacion que aparece en el registro cuando un usuario la ingresa se escriba en la tabla wp_users y no en la tabla wp_usermeta.
    Lo digo porque uso el plugin new_user_approve que le envia al administrador del sitio la informacion del usuario que se quiere registrar para que este le de o no autorizacion, peroesa informacion que recibe el admin esta en la tabla wp_users, es decir toda la informacion generada en el formulario de este post no le llegaria al admin en su correo solo el nombre y email del nuevo usuario.
    Espero me ayuden. Saludos

    • Hola Alejandro

      Lo primero que te diría es que mires a ver si ese plugin que comentas tiene algun hook que te permita intervenir y añadir la información del usuario que necesitas y que está almacenada en user_meta.

      En caso de que lo que necesitas sea sólo modificar la información del usuario que WordPress almacena en la tabla users, echa un vistazo a la función wp_update_user() https://codex.wordpress.org/Function_Reference/wp_update_user

  • Lakhmi Chand

    Hola, muchas gracias Pablo,

    Estoy actualizando una web a wordpress, tiene una base de datos de 2500 usuarios y cada registro de usuario tiene 50 campos.

    Al pasar a wordpress tengo una duda sobre que es mejor para el rendimiento de mysql.

    ¿ Es mejor añadir parte de los campos a wp_users y así descargar wp_usersmeta ?
    ¿ Es mejor añadir todos los campos a wp_usermeta ?

    ¿ Hay otras opciones mejores ?

    gracias de antemano,
    Lakhmi Chand

    • Si tuviera que hacerlo yo, en wp_users no añadiría ningún campo más, es decir, utilizaría esta tabla para el usuario, password e email, y los 50 campos adicionales al usermeta

      No es una gran cantidad de datos, no deberías tener problemas de rendimiento

      • Lakhmi Chand

        Ok, muchas gracias por la pronta respuesta.

  • Tomokazu Nonaka

    Hola Pablo, muchas gracias por la información. Justamente me encuentro haciendo esto que amablemente explicas. Soy novato en esto y estoy modificando una página que me hizo un amigo para dedicarlo a otro asunto. Tengo una pregunta referente a lo que explicas, cómo hago para subir una imagen desde el formulario de registro y que también aparezca en el perfil de usuario en el back-end? que no sea la foto de perfil. Es para que el usuario suba un comprobante de dirección (una cuenta o correspondencia que este a su nombre escaneada o fotografiada) y quede en su perfil de manera que yo pueda ver esa información y sepa que cumple con todos los requisitos.

    De antemano muchas gracias.
    Saludos
    Tomokazu