Añadir campos adicionales al formulario de registro que tiene por defecto WordPress es muy sencillo. A continuación te explico, realmente son 2-3 pasos:
1. Lo primero de todo hay que activar el registro de usuarios (por defecto viene desactivado) desde el panel de control de tu WP en:
Ajustes > Generales > Miembros > cualquiera puede registrarse
Una vez esto ya podemos acceder al formulario de registro desde la url:
/wp-login.php?action=register
Podemos observar que por defecto WordPress trae solo 2 campos básicos: «Nombre de Usuario» y «Correo electrónico».
2. Este paso final es donde vamos añadir por php los campos que queramos a ese formulario de registro anterior. Editamos nuestro archivo functions.php y añadimos el código:
En este ejemplo voy a añadir 2 campos adicionales que no vienen por defecto en la cuenta de usuario («sexo» y «Edad»):
add_action('register_form', 'agregar_campos_registro' ); add_filter('registration_errors', 'validar_campos_registro', 10, 3); add_action('user_register', 'guardar_campos_registro'); function agregar_campos_registro() { $user_edad = ( isset( $_POST['user_edad'] ) ) ? $_POST['user_edad']: ''; ?> <p> <label for="user_edad">Edad<br /> <input type="text" name="user_edad" id="user_edad" class="input" value="<?php echo esc_attr(stripslashes($user_edad)); ?>" size="20" /></label> </p> <p style="margin-bottom:20px"> <label>Sexo</label><br /> <input type="radio" name="user_sexo" class="radio" value="h" checked /> Hombre <input type="radio" name="user_sexo" class="radio" value="m" style="margin-left:10px" /> Mujer </p> <?php } function validar_campos_registro ($errors, $sanitized_user_login, $user_email) { if ( empty( $_POST['user_edad'] ) ) $errors->add( 'user_edad_error', __('<strong>ERROR</strong>: Por favor, introduce tu edad.') ); return $errors; } function guardar_campos_registro ($user_id) { if ( isset($_POST['user_edad']) && isset($_POST['user_sexo']) ){ update_user_meta($user_id, 'user_edad', $_POST['user_edad']); update_user_meta($user_id, 'user_sexo', $_POST['user_sexo']); } }
A continuación puedes ver un pantallazo de como quedaría:
Esto ya te guarda en la bd del usuario esa información nueva (edad, sexo). Podeis personalizarlo a vuestro gusto.
3. (Opcional) Para que en el panel de control, al editar un usuario aparezcan estos 2 campos nuevos hay que añadirlos como ya dije en un anterior post, pero lo repito para este ejemplo en concreto:
<?php add_action( 'show_user_profile', 'agregar_campos_perfil' ); add_action( 'edit_user_profile', 'agregar_campos_perfil' ); add_action( 'personal_options_update', 'guardar_campos_registro' ); add_action( 'edit_user_profile_update', 'guardar_campos_registro' ); function agregar_campos_perfil( $user ) { $user_edad = esc_attr( get_the_author_meta( 'user_edad', $user->ID ) ); $user_sexo = esc_attr( get_the_author_meta( 'user_sexo', $user->ID ) ); ?> <h3>Campos adicionales</h3> <table class="form-table"> <tr> <th><label for="direccion">Edad</label></th> <td> <input type="text" name="user_edad" id="user_edad" class="input" value="<?php echo $user_edad; ?>" size="20" /> <span class="description">Inserta tu edad</span> </td> </tr> <tr> <th><label for="ciudad">Sexo</label></th> <td> <input type="radio" name="user_sexo" class="radio" value="h" <?php if($user_sexo=='h') { echo ' checked'; } ?> /> Hombre <input type="radio" name="user_sexo" class="radio" value="m" style="margin-left:10px" <?php if($user_sexo=='m') { echo ' checked'; } ?> /> Mujer<br /> </td> </tr> </table> <?php } ?>
Y con esto en el panel de control aparecería asi:
pd: no explico mucho el anterior código php por que creo que se entiende y no quiero hacer el post demasiado largo.
Agradezco tu comentario 🤘