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);
}