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 🤘