#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() в свою функцию обратного вызова.