Avisos
Vaciar todo

[Resuelto] Da error FALTA NOMBRE si marcan la opción de CREAR CUENTA al hacer pedido.  

 
Antonio Luis
 Antonio Luis
Usuario activo

Hemos detectado en el Woocommerce de la web https://ofipapel.net/ . Los clientes que hacen el pedido sin loguearse cuando van a procesar el pedido y marcan la opción de CREAR CUENTA les sale el error FALTA NOMBRE cuando le dan  enviar el formulario aunque tenga el campo nombre relleno tanto del cliente como en del usuario.

No se si podríais darme algún tipo de solución a este problema.

Contenido solo visible a usuarios registrados

Respondido : 18/06/2024 2:20 pm
Karen Rios
 Karen Rios
Soporte CMS Webempresa Moderator

Hola Antonio, 

En este error suele generarse por alguna personalización que esté creada, entiendo que tienes algunos códigos añadidos, ya que veo tienes instalado code snippets, revisa si tienes algún fragmento personalizado que actúa sobre los campos del formulario de pago, si es así prueba desactivarlo de forma temporal y revisar si al hacerlo las cuentas se pueden crear de forma correcta desde la página de finalizar comprar. 

Verifícalo y nos comentas como va todo

Un Saludo 

Respondido : 18/06/2024 4:02 pm

Cursos Gratuitos WordPress

Antonio Luis
 Antonio Luis
Usuario activo

@karen Muchísimas gracias. Era eso. Un compañero añadió este código para pedir campos obligatorios. 

Lo que no encuentro es donde puede estar el error ya que en el formulario sí se rellenan esos campos. No se sí en esto puedes echarme una mano. O alguien que esté leyendo esto.

 

Muchas gracias de nuevo.

 

/* 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(
'Nombre',
array(
'type' => 'text',
'required' => true, // esto añade un asterisco
'label' => 'Nombre'
),
( isset($_POST['Nombre']) ? $_POST['Nombre'] : '' )
);
woocommerce_form_field(
'Apellidos',
array(
'type' => 'text',
'required' => true, // esto añade un asterisco
'label' => 'Apellidos'
),
( isset($_POST['Apellidos']) ? $_POST['Apellidos'] : '' )
);
/* DNI*/
woocommerce_form_field(
'DNI',
array(
'type' => 'text',
'required' => true, // esto añade un asterisco
'label' => 'DNI'
),
( isset($_POST['DNI']) ? $_POST['DNI'] : '' )
);
 
 
}
//Añadimos validación del campo
add_action( 'woocommerce_register_post', 'ayudawp_validar_campos', 10, 3 );
function ayudawp_validar_campos( $username, $email, $errors ) {
global $wpdb;
global $woocommerce;
if ($woocommerce->cart==null) //Si no se está en la tienda, por ejemplo en el REST API, devuelve valores originales
return;
 
if ( empty( $_POST['Nombre'] ) ) {
$errors->add( 'error_Nombre', 'Falta rellenar el nombre' );
}
 
if ( empty( $_POST['Apellidos'] ) )
$errors->add( 'error_Apellidos', 'Falta rellenar los Apellidos' );
 
if ( empty( $_POST['DNI'] ) )
$errors->add( 'error_DNI', 'Falta rellenar el DNI' );
 
}
//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['Nombre'] ) ) {
update_user_meta( $customer_id, 'first_name', wc_clean( $_POST['Nombre'] ) );
//$wpdb->update($wpdb->users, array( 'display_name' => wc_clean( $_POST['Nombre'] )), array( 'id' => $customer_id));
}
if ( isset( $_POST['Apellidos'] ) ) {
update_user_meta( $customer_id, 'last_name', wc_clean( $_POST['Apellidos'] ) );
}
if ( isset( $_POST['DNI'] ) ) {
update_user_meta( $customer_id, 'shipping_nif', wc_clean( $_POST['DNI'] ) );
 
}
 
}

 

Respondido : 19/06/2024 11:43 am
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Antonio Luis

Elimina el código anterior y lo sustituyes por el siguiente:

// Añadir campos 'Nombre', 'Apellidos' y 'DNI' al formulario de checkout
add_action('woocommerce_checkout_fields', 'custom_woocommerce_checkout_fields');
function custom_woocommerce_checkout_fields($fields) {
$fields['billing']['billing_first_name'] = array(
'type' => 'text',
'label' => __('Nombre', 'woocommerce'),
'required' => true,
'class' => array('form-row-first'),
'clear' => true
);

$fields['billing']['billing_last_name'] = array(
'type' => 'text',
'label' => __('Apellidos', 'woocommerce'),
'required' => true,
'class' => array('form-row-last'),
'clear' => true
);

$fields['billing']['billing_dni'] = array(
'type' => 'text',
'label' => __('DNI', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);

return $fields;
}

// Validar campos 'Nombre', 'Apellidos' y 'DNI' en el checkout
add_action('woocommerce_checkout_process', 'custom_woocommerce_checkout_process');
function custom_woocommerce_checkout_process() {
if (!$_POST['billing_first_name']) {
wc_add_notice(__('Por favor, introduce tu nombre.', 'woocommerce'), 'error');
}

if (!$_POST['billing_last_name']) {
wc_add_notice(__('Por favor, introduce tus apellidos.', 'woocommerce'), 'error');
}

if (!$_POST['billing_dni']) {
wc_add_notice(__('Por favor, introduce tu DNI.', 'woocommerce'), 'error');
}
}

// Guardar campos 'Nombre', 'Apellidos' y 'DNI' en la cuenta de usuario
add_action('woocommerce_created_customer', 'custom_woocommerce_created_customer');
function custom_woocommerce_created_customer($customer_id) {
if (isset($_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, 'last_name', sanitize_text_field($_POST['billing_last_name']));
}

if (isset($_POST['billing_dni'])) {
update_user_meta($customer_id, 'dni', sanitize_text_field($_POST['billing_dni']));
}
}

// Mostrar y editar campos 'Nombre', 'Apellidos' y 'DNI' en la página de Mi Cuenta
add_action('woocommerce_edit_account_form', 'custom_woocommerce_edit_account_form');
function custom_woocommerce_edit_account_form() {
$user_id = get_current_user_id();
$first_name = get_user_meta($user_id, 'first_name', true);
$last_name = get_user_meta($user_id, 'last_name', true);
$dni = get_user_meta($user_id, 'dni', true);
?>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="account_first_name"><?php _e('Nombre', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr($first_name); ?>" />
</p>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="account_last_name"><?php _e('Apellidos', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_last_name" id="account_last_name" value="<?php echo esc_attr($last_name); ?>" />
</p>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="account_dni"><?php _e('DNI', 'woocommerce'); ?> <span class="required">*</span></label>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_dni" id="account_dni" value="<?php echo esc_attr($dni); ?>" />
</p>
<?php
}

// Guardar cambios de los campos 'Nombre', 'Apellidos' y 'DNI' en la página de Mi Cuenta
add_action('woocommerce_save_account_details', 'custom_woocommerce_save_account_details');
function custom_woocommerce_save_account_details($user_id) {
if (isset($_POST['account_first_name'])) {
update_user_meta($user_id, 'first_name', sanitize_text_field($_POST['account_first_name']));
}

if (isset($_POST['account_last_name'])) {
update_user_meta($user_id, 'last_name', sanitize_text_field($_POST['account_last_name']));
}

if (isset($_POST['account_dni'])) {
update_user_meta($user_id, 'dni', sanitize_text_field($_POST['account_dni']));
}
}

 

Revisa si con eso se soluciona y nos comentas.

 

Un Saludo

Respondido : 19/06/2024 1:02 pm

Antonio Luis
 Antonio Luis
Usuario activo

@pepesoler muchísimas gracias. Parece que funciona.

Respondido : 20/06/2024 2:52 pm
Karen Rios
 Karen Rios
Soporte CMS Webempresa Moderator

Hola Antonio, 

Enhorabuena funciona como necesitas, es un placer para nosotros siempre poder ayudarte. 

Con esto podemos dar el tema como solucionado, no dudes en escribirnos si tienes cualquier otra consulta. 

Un Saludo 😊 

Respondido : 20/06/2024 2:55 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress