Agregue campos de registro personalizados en WooCommerce y el problema de validación del campo del teléfono

Se han hecho preguntas similares anteriormente y probé todas las soluciones, pero por alguna razón no funcionarán para mí.

Tengo un campo de registro de mini Woocommerce incluido en el pie de página de mi sitio para que las personas puedan registrarse fácilmente. El campo del teléfono es obligatorio, pero quiero establecer una longitud mínima para reducir el número de personas que ingresan números falsos.

Tengo los siguientes códigos agregados a mis funciones.php, (estoy incluyendo todas las notificaciones en el formulario para que puedas entender mejor) el marcador de posición y todo funciona pero no puedo obtener la longitud mínima (establecido con “patrón”) atributo personalizado) para trabajar.

Si alguien puede ayudarme a solucionarlo, sería muy apreciado.

Este formulario está incluido en el pie de página de mi sitio web: wondercatspopup.com

El código que he agregado es:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); function custom_override_checkout_fields( $fields ) { $fields['billing']['billing_phone']['custom_attributes'] = array( "pattern" => ".{10,10}" ); return $fields; } 

Y este es el rest de las funciones.php:

 /** * To add WooCommerce registration form custom fields. */ function text_domain_woo_reg_form_fields() { ?> 

<input style="width: 130px; display: inline-block; margin-right:1px;" type="text" class="woocommerce-Input woocommerce-Input--text input-text placeholder" placeholder="İsim / Name *" type="text" class="input-text" name="billing_first_name" id="billing_first_name" value="" /> <input style="width: 130px; display: inline-block; margin-left:1px;" type="text" class="woocommerce-Input woocommerce-Input--text input-text placeholder" placeholder="Soyisim / Surname *" type="text" class="input-text" name="billing_last_name" id="billing_last_name" value="" />

<input style="width:254px!important;" type="text" class="woocommerce-Input woocommerce-Input--text input-text placeholder" placeholder="Cep Telefonu / Mobile *" value="+905" name="billing_phone" id="reg_billing_phone" value="" /> *


add('billing_first_name_error', __('İsim alanı zorunludur! / Name field is required!', 'woocommerce')); } if (isset($_POST['billing_last_name']) && empty($_POST['billing_last_name'])) { $validation_errors->add('billing_last_name_error', __('Soyisim alanı zorunludur! / Surname field is required!', 'woocommerce')); } if (isset($_POST['billing_phone']) && empty($_POST['billing_phone'])) { $validation_errors->add('billing_phone_error', __('Telefon alanı zorunludur! / Phone field is required!', 'woocommerce')); } return $validation_errors; } add_action('woocommerce_register_post', 'text_domain_woo_validate_reg_form_fields', 10, 3); /** * To save WooCommerce registration form custom fields. */ function text_domain_woo_save_reg_form_fields($customer_id) { //First name field if (isset($_POST['billing_first_name'])) { update_user_meta($customer_id, 'first_name', sanitize_text_field($_POST['billing_first_name'])); update_user_meta($customer_id, 'billing_first_name', sanitize_text_field($_POST['billing_first_name'])); } //Last name field if (isset($_POST['billing_last_name'])) { update_user_meta($customer_id, 'last_name', sanitize_text_field($_POST['billing_last_name'])); update_user_meta($customer_id, 'billing_last_name', sanitize_text_field($_POST['billing_last_name'])); } //Phone field if (isset($_POST['billing_phone'])) { update_user_meta($customer_id, 'phone', sanitize_text_field($_POST['billing_phone'])); update_user_meta($customer_id, 'billing_phone', sanitize_text_field($_POST['billing_phone'])); } }

Nota: Su formulario de registro especial ubicado en el pie de página es diferente de los campos de pago de WooCommerce.

En su código, el gancho para su función de validación text_domain_woo_validate_reg_form_fields() simplemente falta. También hay algunos pequeños errores (corregidos)

El mejor lugar para verificar los datos enviados es su función de validación y también debe agregar otra para el pago (en lugar de utilizar un patrón personalizado para el campo de teléfono de pago, que se utiliza para formatear datos) .

Entonces, todo su código relacionado debería ser:

 ## --- FOR CHECKOUT --- ## // Checkout billing phone validation (Checking length) add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process'); function my_custom_checkout_field_process() { if ( $_POST['billing_phone'] && strlen($_POST['billing_phone']) < 10 ) wc_add_notice( __('Please type a correct phone number…', 'woocommerce'), 'error' ); } ## --- FOR CUSTOM REGISTRATION FORM --- ## // Add custom fields to registration form. add_action('woocommerce_register_form_start', 'text_domain_woo_reg_form_fields'); function text_domain_woo_reg_form_fields() { ?> 

*


< ?php } // Checking & validation of custom fields in registration form. add_action('woocommerce_register_post', 'text_domain_woo_validate_reg_form_fields', 10, 3); function text_domain_woo_validate_reg_form_fields( $username, $email, $validation_errors ) { if (isset($_POST['billing_first_name']) && empty($_POST['billing_first_name'])) { $validation_errors->add('billing_first_name_error', __('İsim alanı zorunludur! / Name field is required!', 'woocommerce')); } if (isset($_POST['billing_last_name']) && empty($_POST['billing_last_name'])) { $validation_errors->add('billing_last_name_error', __('Soyisim alanı zorunludur! / Surname field is required!', 'woocommerce')); } if (isset($_POST['billing_phone']) && empty($_POST['billing_phone'])) { $validation_errors->add('billing_phone_error', __('Telefon alanı zorunludur! / Phone field is required!', 'woocommerce')); } // ==> CHECKING PHONE LENGTH (10 character minimal) < == if (isset($_POST['billing_phone']) && strlen($_POST['billing_phone']) < 10 ) { $validation_errors->add('billing_phone_error', __('Please type a correct phone number…', 'woocommerce')); } return $validation_errors; } // Add custom fields to registration form. add_action( 'woocommerce_created_customer', 'custom_save_extra_register_fields' ); // < ==== Missing function custom_save_extra_register_fields($customer_id) { //First name field if (isset($_POST['billing_first_name'])) { update_user_meta($customer_id, 'first_name', sanitize_text_field($_POST['billing_first_name'])); update_user_meta($customer_id, 'billing_first_name', sanitize_text_field($_POST['billing_first_name'])); } //Last name field if (isset($_POST['billing_last_name'])) { update_user_meta($customer_id, 'last_name', sanitize_text_field($_POST['billing_last_name'])); update_user_meta($customer_id, 'billing_last_name', sanitize_text_field($_POST['billing_last_name'])); } //Phone field if (isset($_POST['billing_phone'])) { update_user_meta($customer_id, 'phone', sanitize_text_field($_POST['billing_phone'])); update_user_meta($customer_id, 'billing_phone', sanitize_text_field($_POST['billing_phone'])); } }

El código va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.

Probado y funciona

Cada vez que se verifique la longitud mínima del número de teléfono se mostrará esta alerta (si es necesario) :

enter image description here