Как отобразить все ошибки проверки страницы регистрации сразу в woocommerce

#php #wordpress #woocommerce #hook-woocommerce

#php #wordpress #woocommerce #крючок-woocommerce

Вопрос:

Я настроил новую форму регистрации пользователя, используя концепцию дочерней темы. Для этого я переопределяю form-login.php файл.

wp-content/pluings/woocommerce/templates/myaccount/form-login.php

Моя новая регистрация в is выглядит так

введите описание изображения здесь

Теперь я проверяю поля следующим образом —

 function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {  if ( isset( $_POST['billing_first_name'] ) amp;amp; empty( $_POST['billing_first_name'] ) ) {  $validation_errors-gt;add( 'billing_first_name_error', __( 'First name cannot be left blank.', 'woocommerce' ) );  }    if ( isset( $_POST['billing_last_name'] ) amp;amp; empty( $_POST['billing_last_name'] ) ) {  $validation_errors-gt;add( 'billing_last_name_error', __( 'Last name cannot be left blank.', 'woocommerce' ) );  }   if ( isset( $_POST['reg_customer_dob'] ) amp;amp; empty( $_POST['reg_customer_dob'] ) ) {  $validation_errors-gt;add( 'reg_customer_dob_error', __( 'Date of birth cannot be left blank.', 'woocommerce' ) );  }   if ( isset( $_POST['billing_email_cnfrm'] ) amp;amp; empty( $_POST['billing_email_cnfrm'] ) ) {  $validation_errors-gt;add( 'confirm_email_error', __( 'Confirm email address cannot be left blank.', 'woocommerce' ) );  }   /** Below Code added becouse code conflict in my account/Registration amp; chekout page/regsitration */   if(isset($_POST['billing_email']))  {  if($_POST['billing_email_cnfrm'] != $_POST['billing_email'])  {//$_POST['billing_email'] email filed in checkout page  error_log("Confirm Email checkout page - " . $_POST['billing_email_cnfrm'] ."And User Email - " . $_POST['billing_email']);  $validation_errors-gt;add( 'email_not_match_error', __( 'Check Out Error Confirm Email address does not match.', 'woocommerce' ) );  }  }   if( isset($_POST['email']))  {  if ( $_POST['billing_email_cnfrm'] != $_POST['email'] ) {  //$_POST['eamil'] email filed in Myaccount regisration page  error_log("Confirm Email registration page - " . $_POST['billing_email_cnfrm'] ."And User Email - " . $_POST['email']);  $validation_errors-gt;add( 'email_not_match_error', __( 'Registration Error Confirm Email address does not match.', 'woocommerce' ) );  }  }    /** End of above Code -- added becouse code conflict in my account/Registration amp; chekout page/regsitration */    if ( isset( $_POST['user_password_again'] ) amp;amp; empty( $_POST['user_password_again'] ) ) {  $validation_errors-gt;add( 'confirm_password_error', __( 'Confirm password cannot be left blank.', 'woocommerce' ) );  }   /** Below Code added becouse code conflict in my account/Registration amp; chekout page/regsitration */   if(isset($_POST['account_password'] ))  {  if ( $_POST['user_password_again'] != $_POST['account_password'] ) {  //$_POST['account_password'] Default password filed in Checkout page  $validation_errors-gt;add( 'password_not_match_error', __( 'Checkout Error Passwords do not match.', 'woocommerce' ) );  }  }  if(isset($_POST['password'] ))  {  if ( $_POST['user_password_again'] != $_POST['password'] ) {  //$_POST['account_password'] Default password filed in Myaccount regstration page  $validation_errors-gt;add( 'password_not_match_error', __( 'Registration Error Passwords do not match.', 'woocommerce' ) );  }  }   /** End of above Code -- added becouse code conflict in my account/Registration amp; chekout page/regsitration */    if ( isset( $_POST['billing_phone'] ) amp;amp; empty( $_POST['billing_phone'] ) ) {  $validation_errors-gt;add( 'billing_mobile_number_error', __( 'Mobile number cannot be left blank.', 'woocommerce' ) );  }   if(!validate_mobile($_POST['billing_phone']))  {  $validation_errors-gt;add( 'billing_mobile_number_error', __( 'Mobile number entry is numerical only and cannot contain any spaces.', 'woocommerce' ) );  }   /*  if (isset($_POST['billing_phone']) amp;amp; strlen($_POST['billing_phone']) lt; 5 ) {  $validation_errors-gt;add('billing_mobile_number_error', __('lt;stronggt;Phone number length should not be less than 5 digitlt;/stronggt;', 'woocommerce'));  }  */    return $validation_errors; } add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );  

Это работает нормально. но он показывает ошибку проверки одну за другой (изображение прилагается для справки).

введите описание изображения здесь

Я хочу отобразить все ошибки проверки сразу. Любые советы

Обновить

Я также попробовал крючок woocommerce_process_registration_errors вместо woocommerce_register_post. если я использую крючок woocommerce_process_registration_errors, чтобы список отображался, но проверки по умолчанию функции wc_create_new_customer() (расположены в wc-user-functions.php файл) не отображается.

Ответ №1:

Используйте woocommerce_process_registration_errors крючок фильтра. попробуйте выполнить приведенный ниже код.

 function custom_woocommerce_process_registration_errors( $validation_errors, $username, $password, $email ){   if ( !isset( $_POST['email'] ) || $_POST['email'] == '' ) {  $validation_errors-gt;add( 'email', __( 'Please enter email address.', 'woocommerce' ) );  }   if ( !isset( $_POST['password'] ) || $_POST['password'] == '' ) {  $validation_errors-gt;add( 'password', __( 'Please enter passwors.', 'woocommerce' ) );  }    return $validation_errors; }  add_filter( 'woocommerce_process_registration_errors', 'custom_woocommerce_process_registration_errors', 10, 4 );  

Проверено и работает.

введите описание изображения здесь

Комментарии:

1. Спасибо Бхаутику за ваш ответ. Я уже пробовал этот крючок. Когда я применяю этот крючок, сообщения об ошибках проверки функции wc_create_new_customer () (я думаю, что они по умолчанию в woocommerce ) не отображаются. Отображаются только сообщения (пользовательские проверки) функции обратного вызова. Нужно ли мне переписывать все проверки?

2. Да, вы должны написать подтверждение в соответствии с вашими потребностями.

3. Спасибо, Бхаутик. Это работает. Я добавил все проверки функции wc_create_new_customer() в свою функцию обратного вызова.