olegfromomsk сказал(а)
Подскажите, как сделать?
1. создать таблицу в БД куда складывать кодовые слова и их статус
2. вывести поле для ввода кодового слова в форме регистрации
3. в процессе регистрации отслеживать наличие кодового слова и его соответствие данным таблицы с кодовыми словами
4. если все ок, то регистрировать юзера, если нет, то выводить текст ошибки
как то так
1. создал таблицу, добавил в нее значение
2. в файле form-register.php добавил блок:
<div class="form-block-rcl default-field"> <input required type="text" placeholder="Регистрационный номер" name="code_word" id="code_word"> <i class="fa fa-file-text-o"></i> <span class="required">*</span> </div>
на форме регистрации появился нужный инпут.
но есть ощущение, что это неверно, т.к.данный инпут никак не связан с данными с формы регистрации.
Подскажите, как правильно сделать?
olegfromomsk сказал(а)
не связан с данными с формы регистрации
верно не связан и данные с него обрабатываться не будут, вам надо самому написать обработчик данных с этого поля, например:
add_filter('rcl_registration_errors','rcl_chek_custom_input'); function rcl_chek_custom_input($errors){ if($_POST['code_word']){ //код был введен, тут его проверяем //при необходимости возвращаем ошибку $errors = new WP_Error(); $errors->add( 'custom_error', __('Введен неизвестный код') ); return $errors; }else{ //код не был введен $errors = new WP_Error(); $errors->add( 'custom_error', __('Введите код') ); } return $errors; }
Добавил такой код в файл register.php.
Регистрация проходит успешно при любом кодовом слове.
Где-то ошибка?
add_filter('rcl_registration_errors','rcl_chek_custom_input'); function rcl_chek_custom_input($errors){ // получаю код из БД global $wpdb; $reg_word = $wpdb->get_var('SELECT reg_word FROM wp_reg_word'); //Сравниваю коды if($_POST['code_word'] != $reg_word){ $errors = new WP_Error(); $errors->add( 'custom_error', __('Введен неизвестный код') ); } return $errors; }
Вернул form-register.php в исходный вид, добавил поле через пункт меню "Поля профиля". Поле появилось в регистрации.
Ввожу логин, почту и кодовое слово с ошибками - получаю сообщение на регистрационной форме красным шрифтом об ошибке в логине и почте. О моем кодовом слове ничего нет. После исправления логина и почты регистрация проходит успешно, не взирая на кодовое слово.
Код в register.php добавлен перед проверкой повторного ввода пароля, если есть соответствующая отметка.
Пробовал добавлять echo в ветку if($_POST['code_word'] != $reg_word){} для вывода введенного кодового слова и вывода значения из БД - все выводится, следовательно проверка работает.
Может нужно где-то выше в файле "зарегистрировать" новое поле, чтоб для него выводился текст ошибки?
работает, если я из register.php удаляю схожий код
//Проверяем заполненность поля повтора пароля add_filter('rcl_registration_errors','rcl_chek_repeat_pass'); function rcl_chek_repeat_pass($errors){ if(!rcl_get_option('repeat_pass')) return false; if($_POST['user_secondary_pass'] != $_POST['user_pass']){ $errors = new WP_Error(); $errors->add( 'rcl_register_repeat_pass', __('Repeated password not correct!','wp-recall') ); } return $errors; }
почему такое происходит?
а главное, что надо сделать, чтоб обновление WP-recall не влияло на мои изменения?
на текущий момент мой код с проверкой кодового слова находится в functions.php моей темы,
а из wp-content plugins wp-recall functions register.php удален код о проверке повторного ввода пароля
Попробовал сделать remove-filter в functions.php моей темы, но нет результата.
Если закомментировать add_filter('rcl_registration_errors','rcl_chek_repeat_pass'); в register.php, то все работает как надо.
Еще попутный вопрос возник - как стилизовать поле, добавленное через Поля Профиля?
Оно выбивается по сравнению с родными полями. У него есть label, красная звездочка стоит в label, а не в самом инпуте. А никакого класса этому блоку не дается, чтоб его выцепить через css.
Или с этим вопросом в новую тему?
Спасибо, заработало, как мне и хотелось.
Итог:
1. Добавил новое поле через "Поля профиля"
2. В functions.php темы добавил:
// проверка ввода рег. кода при рег-ии add_filter('rcl_registration_errors','rcl_chek_custom_input'); function rcl_chek_custom_input($errors){ // получаю код из БД global $wpdb; $reg_word = $wpdb->get_var('SELECT reg_word FROM wp_reg_word'); //Сравниваю коды if($_POST['reg_word'] != $reg_word){ $errors = new WP_Error(); $errors->add( 'custom_error', __('Введен некорректный регистрационный код!') ); return $errors; } } add_action('init','del_fltr'); function del_fltr() { remove_filter('rcl_registration_errors','rcl_chek_repeat_pass', 10); }