15 ответ(ов) в теме
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
1
06:17

Версия WP-Recall: 16.1.15

Приветствую.

Ищу способ реализовать регистрацию пользователя только после ввода им специального кодового слова, которое он получит после заключения договора в офисе.
Подскажите, как сделать?

Спасибо.

0
Андрей CS
не в сети 7 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 10451
2
09:45

olegfromomsk сказал(а)
Подскажите, как сделать?

1. создать таблицу в БД куда складывать кодовые слова и их статус
2. вывести поле для ввода кодового слова в форме регистрации
3. в процессе регистрации отслеживать наличие кодового слова и его соответствие данным таблицы с кодовыми словами
4. если все ок, то регистрировать юзера, если нет, то выводить текст ошибки
как то так

0
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
3
17:04

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>

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

Редакции сообщения
27.05.2018 17:05olegfromomskПричина: не указано
0
Андрей CS
не в сети 7 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 10451
4
17:11

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

1
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
5
17:58

Добавил такой код в файл 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;
}

0
Андрей CS
не в сети 7 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 10451
6
19:35

вроде все верно, код довольно простой, думаю, вы сами в состоянии произвести его отладку

0
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
7
08:15

Вернул form-register.php в исходный вид, добавил поле через пункт меню "Поля профиля". Поле появилось в регистрации.

Ввожу логин, почту и кодовое слово с ошибками - получаю сообщение на регистрационной форме красным шрифтом об ошибке в логине и почте. О моем кодовом слове ничего нет. После исправления логина и почты регистрация проходит успешно, не взирая на кодовое слово.

Код в register.php добавлен перед проверкой повторного ввода пароля, если есть соответствующая отметка.
Пробовал добавлять echo в ветку if($_POST['code_word'] != $reg_word){} для вывода введенного кодового слова и вывода значения из БД - все выводится, следовательно проверка работает.

Может нужно где-то выше в файле "зарегистрировать" новое поле, чтоб для него выводился текст ошибки?

0
Otshelnik-Fm
не в сети 6 часов
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11778
8
10:03

Тему перенес в кастомизации. К функционалу базовой версии с заявленным функционалом это отношения не имеет

Редакции сообщения
29.05.2018 10:03Otshelnik-FmПричина: не указано
0
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
9
18:05

работает, если я из 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 удален код о проверке повторного ввода пароля

Редакции сообщения
29.05.2018 18:06olegfromomskПричина: не указано
0
Otshelnik-Fm
не в сети 6 часов
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11778
10
18:08

чтобы отменить фильтр - можно сделать remove_filter с такими же параметрами
Только ответственность по правильной работе тогда на вас

1
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
11
19:04

Попробовал сделать remove-filter в functions.php моей темы, но нет результата.
Если закомментировать add_filter('rcl_registration_errors','rcl_chek_repeat_pass'); в register.php, то все работает как надо.

Еще попутный вопрос возник - как стилизовать поле, добавленное через Поля Профиля?
Оно выбивается по сравнению с родными полями. У него есть label, красная звездочка стоит в label, а не в самом инпуте. А никакого класса этому блоку не дается, чтоб его выцепить через css.

Или с этим вопросом в новую тему?

0
Otshelnik-Fm
не в сети 6 часов
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11778
12
19:12

Попробовал сделать remove-filter

нет такой функции. Читайте внимательно - там нижнее подчеркивание.

А приоритет 3м аргументом какой ставили?

По умолчанию он 10-ть (если не указан)

Вы не можете просматривать опубликованные ссылки

и указывать надо именно 10

0
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
13
19:21

было без приоритета, проставил
remove_filter('rcl_registration_errors','rcl_chek_repeat_pass', 10);

без изменений, регистрация проходит

0
Otshelnik-Fm
не в сети 6 часов
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11778
14
19:24

Теперь я думаю это надо обернуть в функцию и повесить на хук init

Вы не можете просматривать опубликованные ссылки
1
olegfromomsk
не в сети 3 месяца
На сайте с 05.05.2018
Участник
Тем 2
Сообщения 15
15
19:27

Спасибо, заработало, как мне и хотелось.
Итог:
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);
}

Редакции сообщения
29.05.2018 19:40olegfromomskПричина: не указано
29.05.2018 19:42olegfromomskПричина: не указано
1
Тема закрыта. Публикация новых сообщений запрещена.