Cómo añadir campos al formulario de registro de WooCommerce

Por defecto, el formulario de registro de WooCommerce solo pide el correo electrónico, pero ¿y si quieres pedir más datos para poder registrarse? ¿se puede?

Lo primero que debes tener en cuenta es que, también por defecto, la página de «Mi cuenta» de WooCommerce no permite el registro, así que primero deberás activar este ajuste de WooCommerce.

Una vez hayas comprobado que esté activo el ajuste, solo te queda decidir qué campo quieres añadir al formulario de registro de WooCommerce y crear una función como esta:

/* Campo extra en registro de WooCommerce */
add_action( 'woocommerce_register_form', 'ayudawp_nuevo_campo_registro_woo' );
function ayudawp_nuevo_campo_registro_woo(){
woocommerce_form_field(
'grupo_favorito',
array(
'type' => 'text',
'required' => true, // esto añade un asterisco
'label' => '¿Cuál es tu grupo musical favorito?'
),
( isset($_POST['grupo_favorito']) ? $_POST['grupo_favorito'] : '' )
);
}
//Añadimos validación del campo
add_action( 'woocommerce_register_post', 'ayudawp_validar_campos', 10, 3 );
function ayudawp_validar_campos( $username, $email, $errors ) {
if ( empty( $_POST['grupo_favorito'] ) ) {
$errors->add( 'error_grupo_favorito', '¡En serio, queremos saberlo!' );
}
}
//Añadimos el campo a la base de datos
add_action( 'woocommerce_created_customer', 'ayudawp_guardar_campos_registro' );
function ayudawp_guardar_campos_registro( $customer_id ){
if ( isset( $_POST['grupo_favorito'] ) ) {
update_user_meta( $customer_id, 'grupo_favorito', wc_clean( $_POST['grupo_favorito'] ) );
}
}

En el código anterior hacemos 3 cosas:

  1. Creamos un nuevo campo en el que pedimos al usuario que nos diga cuál es su grupo favorito. (grupo_favorito) y el texto visible.
  2. Añadimos validación para mostrar un error si no se rellena el campo, haciéndolo obligatorio.
  3. Guardamos el valor en la base de datos.

O sea, esto:

Este código que hemos visto lo ideal es que lo añadas a un plugin de personalizaciones, o en su defecto al archivo functions.php del tema hijo activo.

(4 votos, promedio: 5) Valora este artículo para ayudar a mejorar la calidad del blog

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

5 comentarios en “Cómo añadir campos al formulario de registro de WooCommerce”

  1. saludo Fernando desde Venezuela, gracias por la info va de lujo, unas consultas:
    como modifico el rol del usuario desde el formulario de registro en especifico (comprador /vendedor) Son los roles.
    y lo otro si selecciona vendedor mostrar otro formulario

  2. Una consulta, como puedo colocar el campo en la primera posición, ya que quiero agregar un campo de nombre y apellido pero deseo que aparezca antes de todos los demás campos de registro (correo y contraseña). Gracias!

    1. // 1. ADD FIELDS
        
      add_action( 'woocommerce_register_form_start', 'bbloomer_add_name_woo_account_registration' );
        
      function bbloomer_add_name_woo_account_registration() {
          ?>
        
          
           *
          <input type="text" class="input-text" name="billing_first_name" id="reg_billing_first_name" value="" />
          
        
          
           *
          <input type="text" class="input-text" name="billing_last_name" id="reg_billing_last_name" value="" />
          
        
          
        
          add( 'billing_first_name_error', __( 'Error: First name is required!', 'woocommerce' ) );
          }
          if ( isset( $_POST['billing_last_name'] ) && empty( $_POST['billing_last_name'] ) ) {
              $errors->add( 'billing_last_name_error', __( 'Error: Last name is required!.', 'woocommerce' ) );
          }
          return $errors;
      }
        
      ///////////////////////////////
      // 3. SAVE FIELDS
        
      add_action( 'woocommerce_created_customer', 'bbloomer_save_name_fields' );
        
      function bbloomer_save_name_fields( $customer_id ) {
          if ( isset( $_POST['billing_first_name'] ) ) {
              update_user_meta( $customer_id, 'billing_first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
              update_user_meta( $customer_id, 'first_name', sanitize_text_field($_POST['billing_first_name']) );
          }
          if ( isset( $_POST['billing_last_name'] ) ) {
              update_user_meta( $customer_id, 'billing_last_name', sanitize_text_field( $_POST['billing_last_name'] ) );
              update_user_meta( $customer_id, 'last_name', sanitize_text_field($_POST['billing_last_name']) );
          }
        
      }
  3. Tenía la misma duda y buscando logré encontrar la respuesta..
    Solo cambia ‘woocommerce_register_form’ por ‘woocommerce_register_form_start’ y listo =)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
  • Responsable: Fernando Tellado ([email protected])
  • Fin del tratamiento: Moderación de comentarios para evitar spam
  • Legitimación: Tu consentimiento
  • Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
  • Derechos: Acceso, rectificación, portabilidad, olvido

 

Ir arriba Ir al contenido