Contents
Introducción
En este artículo encontrarás un tutorial completo para añadir campos extra en la edición de usuario de WordPress usando PHP. Verás cómo mostrar nuevos campos en la pantalla de perfil del usuario y en la edición desde el administrador, cómo validarlos, sanitizarlos y guardarlos con seguridad, y cómo mostrar esos valores en la lista de usuarios del panel de administración. Todos los fragmentos de código están listos para copiar y pegar en el archivo functions.php de un tema hijo o, preferiblemente, en un plugin específico del sitio.
Conceptos clave
- Hooks para mostrar campos: show_user_profile (edición de tu propio perfil) y edit_user_profile (edición de otro usuario desde administración).
- Hooks para guardar: personal_options_update (guardar propio perfil), edit_user_profile_update (guardar desde administrador) y user_register (cuando se registra un nuevo usuario).
- Metadatos de usuario: get_user_meta() y update_user_meta() para almacenar los valores personalizados.
- Seguridad: wp_nonce_field() y wp_verify_nonce() para evitar CSRF current_user_can() para comprobar capacidades funciones de saneamiento como sanitize_text_field() y sanitize_textarea_field().
- Escapado al mostrar: esc_html() o esc_attr() antes de imprimir en HTML.
Ejemplo práctico: Añadir Cargo, Teléfono y Biografía corta
A continuación se muestra un conjunto de funciones que añade tres campos: cargo (text), telefono (text) y bio_corta (textarea). El código muestra los campos en el perfil, valida y guarda los datos, los añade al formulario de registro y los muestra en la lista de usuarios del admin.
1) Mostrar los campos en la pantalla de edición/ perfil
ID, cargo, true ) telefono = get_user_meta( user->ID, telefono, true ) bio_corta = get_user_meta( user->ID, bio_corta, true ) ?>
class=regular-text /> | |
class=regular-text /> | |
2) Guardar los campos al actualizar el perfil o editar desde admin
3) Guardar campos al registrar un nuevo usuario
Si quieres añadir estos campos al formulario de registro y guardarlos al crearse la cuenta, añade el siguiente código. Importante: añadir campos al registro requiere modificar la plantilla de registro o usar un hook como register_form para mostrar campos en la página de registro predeterminada.
4) Validación personalizada (opcional)
Si deseas impedir que un registro avance sin un campo obligatorio o con formato inválido, usa register_post (o user_registration_errors) para añadir errores y mostrarlos al usuario.
add( telefono_error, __( ERROR: Introduce un teléfono válido. ) ) } return errors } add_filter( registration_errors, mi_validar_registro_usuario, 10, 3 ) ?>
5) Mostrar los campos extra en la lista de usuarios del admin
Para facilitar la administración, puedes añadir columnas en la pantalla Usuarios para ver rápidamente el cargo o teléfono.
Buenas prácticas y consideraciones
- Usar nonces: Siempre incluir y verificar nonces al procesar datos provenientes de formularios para proteger contra CSRF.
- Verificar capacidades: Usar current_user_can(edit_user, user_id) cuando se guarden datos relativos a otros usuarios.
- Saneamiento y escapado: Sanitizar al guardar (sanitize_text_field, sanitize_textarea_field, esc_url_raw, etc.) y escapar al imprimir (esc_html, esc_attr, esc_textarea).
- Seguridad de subida de archivos: Si extiendes para permitir archivos (avatar o documentos), usa funciones de manejo de archivos de WP y comprueba tipos MIME y capacidades.
- Internacionalización: Si el código se usará en varios idiomas, envolver textos con funciones __() o _e() y preparar el plugin/tema para traducciones.
- Compatibilidad: Preferible implementar esto en un plugin en lugar de functions.php para fácil activación, desactivación y portabilidad.
Notas avanzadas
- Campos repetibles o complejos: Para conjuntos de datos más complejos (listas repetibles, relaciones, select con datos dinámicos), conviene serializar arrays con cuidado o usar meta con prefijos y un manejo más estructurado (por ejemplo, JSON con wp_json_encode/wp_json_decode).
- Integración con REST API: Si la web usa la REST API, registra los meta fields con register_meta() y show_in_rest => true para poder leer/escribir esos metadatos desde API.
- Usuarios masivos: Si necesitas importar/actualizar masivamente metadatos de usuario, utiliza funciones nativas WP y procesos por lotes para evitar timeouts.
Resumen rápido (pasos mínimos)
- Crear función para mostrar campos y engancharla a show_user_profile y edit_user_profile.
- Insertar nonce en el formulario con wp_nonce_field().
- Crear función de guardado y engancharla a personal_options_update y edit_user_profile_update (y user_register para nuevos registros).
- Saneamiento y verificación de capacidades antes de update_user_meta().
- Escapar al mostrar los datos en el front o en el admin.
Ejemplo completo (resumen del plugin)
El conjunto de funciones ya mostrado en fragmentos puede agruparse en un único archivo PHP que actúe como plugin. Colócalo dentro de un único archivo con cabecera de plugin si prefieres distribuirlo o activarlo/desactivarlo con facilidad.
Referencias útiles
- get_user_meta()
- update_user_meta()
- wp_nonce_field()
- Documentación de usuarios en el Handbook de plugins
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |