Проверьте, существует ли электронная почта пользователя, и если нет, остановите отправку формы ниндзя
У меня есть одна форма, построенная на формах ниндзя, и я использую ajax для отправки.Мне нужно проверить, существует ли введенное письмо в базе данных (user_email), и если оно существует правильно, я отправляю форму правильно, но если она не существует, форма не отправляется, и мне нужно дать пользователю сообщение типа "электронная почта не существует".Форма представляет собой опрос, который должен заполнить зарегистрированный пользователь, который дает нам отзыв о наших услугах, но опрос находится на странице, где пользователь может отправить свое мнение без необходимости регистрации.
Я расследую, и на данный момент у меня есть:
function example_disable_saving_subs( $save, $form_id ) {
global $ninja_forms_processing;
$form_id = $ninja_forms_processing->get_form_ID();
$email = ninja_forms_get_field_by_id( 18 );
//cuestionario feedback profesor sobre creación de un curso
if($form_id == 3){
if( !email_exists( $email )) {
$save = false;
$ninja_forms_processing->add_error('email_no_existe', 'El email no existe');
}
}
return $save;
}
add_filter( 'ninja_forms_save_submission', 'example_disable_saving_subs', 2, 10 );
Но я выбираю поле $email без введенного значения... Кроме того, я не знаю, как дать пользователю сообщение "электронная почта не существует".
Как видите, я выбрал фильтр ninja_forms_save_submission. Может быть, это не правильный фильтр. Я надеюсь, что ваша верная помощь. Заранее спасибо, Даниэль
2 ответа
Спасибо за вашу помощь @Renato, я даю вам +1:) Это правда, что я могу сделать это так, как вы говорите мне, но я не хочу нарушать API WordPress, то есть способ, которым эта CMS использует JavaScript, php, и т. д. Итак, я хотел сделать это через API форм ниндзя, который является плагином, который я использую для построения этого опроса. Наконец, я решил это... это была моя ошибка, потому что я не использовал правильный фильтр... Исследуя еще немного, есть еще один фильтр, гораздо более подходящий: ninja_forms_pre_process Вот код:
function add_change_ninja_forms_landing_page(){
add_action( 'ninja_forms_pre_process', 'handle_custom_ninja_forms' );
}
add_action( 'init', 'add_change_ninja_forms_landing_page' );
function handle_custom_ninja_forms(){
global $ninja_forms_processing;
$form_id = $ninja_forms_processing->get_form_ID();
//if it's my form of survey
if( $form_id == 3 ){
$email = $ninja_forms_processing->get_field_value( 18 ); //pick up the value of the email field
//use the native function of wordpress to check if there's a user with this email
//is anyone has this email, it does not exist
if( !email_exists( $email )) {
$ninja_forms_processing->add_error('email_no_existe', 'El email indicado no está registrado en nuestra base de datos'); //add_error stop the form and gives the error message
}
}
}
С кодом выше все работает отлично!:) Спасибо!
Daniel,
Я не знаком с ninja_forms, но, думая о javascript, вы можете инкапсулировать свой код, чтобы проверить, существует ли пользователь в URL, а затем, при выполнении вызова ajax, использовать его для проверки... Если вы не можете изменить запрос ajax, вы можете проверить поле на событии размытия и отключить кнопку отправки, пока она не будет помечена как "успешная"
Чтобы вы могли создавать файлы PHP и, тем не менее, использовать все возможности и возможности Wordpress, вы можете просто включить этот файл в начале файла, который будет называтьсяrequire(wp-blog-header.php)