Проверьте, существует ли электронная почта пользователя, и если нет, остановите отправку формы ниндзя

У меня есть одна форма, построенная на формах ниндзя, и я использую 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)

Другие вопросы по тегам