Добавляю в стандартную форму регистрации wp-recall регистрацию по СМС.
1. в файл form-register.php добавил вывод строки ввода смс кода, после того, как будет заполнено поле "номер телефона":
<?php if ($_REQUEST['user_tel'] !=null) { echo '<div class="form-block-rcl default-field"><input required type="number" placeholder="СМС код" value="" name="control_key" id="control_key"><span class="required">*</span></div>';} else {'';}; ?>
2. Далее в файл обработчик register.php добавил генерацию смс-кода, его отправку по СМС и проверку введённого кода пользователем:
//генерация смс кода $number = '4'; $arr = array('0','1','2','3','4','5','6','7','8','9'); $pass2 = ""; for($i = 0; $i < $number; $i++) { $index = rand(0, count($arr) - 1); $pass2 .= $arr[$index]; } $pass3 = $pass2; //** отправляем СМС **// // получаем смс код, введённый пользователем $control_key = $_POST['control_key']; //сравниваем смс код от пользователя и сгенерированный if($control_key != $pass3){ $wp_errors->add( 'rcl_register_empty', __('Введите код из СМС','wp-recall') ); return $wp_errors; } else if($control_key == $pass3) continue;
Проблема в том, что если пользователь код вводит неверно и жмёт кнопку "Зарегистрироваться" в форме регистрации, то идёт новая генерация кода. Необходимо же сгенерировать код только 1 раз (как это сделать?, пробовал ставить различный проверки на генерацию смс кода в зависимости от заполненности полей формы пользователем, так же пробовал код генерации с проверкой оборачивать в сессию - не помогло 🙁 ).
Кроме как записывать в БД сгенерированый код, и затем уже делать проверку у меня мысли нет. Может есть другое решение?