En WordPress existe la posibilidad de que los usuarios creen su propia cuenta de forma automática sin que el administrador tenga que intervenir.

Para ello debe estar habilitada la opción «Cualquiera puede registrarse» en los Ajustes Generales de WordPress.

Una vez habilitada la casilla de registro, cuando accedamos a la pantalla de login, veremos la opción Registrarse:

El link de registro tiene la estructura: www.tudominio.xxx/wp-login.php?action=register, por lo que puedes crear un enlace personalizado donde quieras (en el menú principal, widgets…).

El formulario de registro solamente solicita un nombre de usuario y una dirección de correo electrónico, por lo que no se guardarán maś datos del usuario y no sabremos nada más de él.

En posts anteriores vimos cómo podíamos añadir un check de aceptación de términos de privacidad en el formulario de registro de WordPress, pero ese checkbox no era un dato que se registrase en ningún sitio, tan solo servía para comprobar la acción del usuario que valida que se hace responsable de aceptar dichos términos.

Imaginemos que además de añadir el checkbox de aceptación, queremos también añadir un campo para solicitar el teléfono del usuario y que este además, se guarde junto a los datos del usuario.

El proceso consta de 4 funciones que habrá que especificar en el archivo functions.php del tema activo, o en nuestro propio plugin de funciones.

Añadir los campos al formulario de registro

//Añadir campos adicionales al registro del usuario
function campos_adicionales_registro_usuario(){
  $user_phone = (isset($_POST['user_phone'])) ? $_POST['user_phone'] : ''; ?>

  <p>
    <label for="user_phone">Teléfono<br/>
    <input type="number" id="user_phone" name="user_phone" class="input" size="25" value="<?php echo esc_attr($user_phone);?>"></label>
  </p>

 <div id="aceptacionTerminosRegistro">
 <input type="checkbox" name="acepto"  required/> Acepto los <b><a href="aviso-legal" target="_blank">términos y condiciones</a></b> de la política de protección de datos.
 </div>
<?php }
add_action('register_form', 'campos_adicionales_registro_usuario', 10,3);

El resultado sería:

Validar los datos introducidos antes de guardarlos

El siguiente paso consistiría en validar que el usuario ha insertado un dato válido en el campo teléfono y ha aceptado los términos y condiciones de la política de privacidad.

//Validar campos adicionales del registro de usuario
function validar_datos_usuario($errors, $sanitized_user_login, $user_email){
  if(empty($_POST['user_phone'])){
    $errors->add('user_phone_error', __('<strong>ERROR</strong>: Por favor, introduzca su Nº de Teléfono'));
  }

  if(empty($_POST['acepto'])){
    $errors->add('acepto_error', __('<strong>ERROR</strong>: Debe marcar la casilla de aceptación de privacidad.'));
  }
  return $errors;
}
add_filter('registration_errors', 'validar_datos_usuario', 10, 3);

Si los campos están vacíos darán el correspondiente aviso y no dejará continuar:

Guardar los datos adicionales del formulario de registro

//Guardar los campos adicionales del usuario
function guardar_campos_adicionales_usuario($user_id){
  if(isset($_POST['user_phone'])){
    update_user_meta($user_id, 'user_phone', sanitize_text_field($_POST['user_phone']));
  }
}
add_action('user_register', 'guardar_campos_adicionales_usuario');

Con este código guardamos los campos adicionales del formulario de registro, en este caso, el campo teléfono.

Visualizar los datos guardados en el panel «Tu perfil» y «Editar Usuario»

//Agregar los campos adicionales a Tu Perfil y Editar Usuario
function agregar_campos_personalizados_usuario_backend($user) {
  $user_phone = esc_attr(get_the_author_meta('user_phone', $user->ID ));?>

  <h3>Campos adicionales</h3>

  <table class="form-table">
      <th><label for="user_phone">Teléfono</label></th>
    <tr>
      <td><input type="text" name="user_phone" id="user_phone" class="regular-text" value="<?php echo $user_phone;?>" /></td>
    </tr>
  </table>

<?php }
add_action('show_user_profile', 'agregar_campos_personalizados_usuario_backend');
add_action('edit_user_profile', 'agregar_campos_personalizados_usuario_backend');

add_action('personal_options_update', 'guardar_campos_adicionales_cliente');
add_action('edit_user_profile_update', 'guardar_campos_adicionales_cliente');

Con esto últmo ya veremos el teléfono registrado por el cliente desde el panel de usuarios:

Recuerda que puedes guardar todos los campos que desees solicitar al usuario, pidiéndolos en la primera función mediante los «inputs», validándolos en la segunda función, y guardándolos y visualizándolos en la tercera y cuarta función.

Si crees que este artículo te ha sido útil, compártelo! Hasta el siguente post 😉