Сегодня я расскажу, как расширить регистрацию дополнительными полями и подружить эти поля с ajax-login(удобный плагин, позволяющий выводить форму регистрации и логина непосредственно на страницу).
Для расширения регистрации я нашёл два плагина:
Первый самый простой, в нём есть возможность только добавлять поля при регистрации и выбрать пункт, обязательны ли эти поля для заполнения или нет. Есть один нюанс – ключ (имя) поля плагин составляет из приставки dr_ и названия поля, которое вы введёте, но русский язык не воспринимается, поэтому я рекомендую сначала заполнить название на латинице, а потом уже поменять его на русское.
Второй обладает более расширенными настройками, среди которых такие как:
- 1) Возможность добавления капчи
- 2) Настройка письма уведомления пользователя
- 3) Регистрация только по инвайт-кодам
- 4) Вывод лицензионного соглашения
- 5) Добавление дополнительных полей не только при регистрации, но и просто в персональные настройки пользователя.
Здесь та же проблема, что и в первом плагине, нужно писать имена полей на латинице, иначе поле останется вообще без имени.
После добавления нужных нам полей перейдём к ajax-login, чтобы научить его работать с ними. Открываем папку с плагином, нам понадобятся файлы ajaxlogin.js (проверяет и передаёт данные php-скриптам, а так же выводит результат в виде сообщения), al_template.php (отвечает за вывод форм на страницу) и register.php (производит регистрацию).
Сперва посмотрим как же называются наши дополнительные поля, в случае с DRegister их названия пишутся на странице настройки в виде meta_key: dr_deatelnost (dr_deatelnost и будет именем нашего поля), в плагине Register Plus имя поля будет таким же, как вы его задали, т.е если назвали Pol, то и имя будет Pol. Эти имена нам понадобятся в дальнейшем, чтобы по ним сохранять данные. а так же извлекать их впоследствии. У меня это два поля: dr_(специальность) и dr_deatelnost(деятельность).
Начнём с шаблона (al_template.php). Форма регистрации - al_registerForm, изменяем её. Она изначально была у меня изменена, т.к. подгонялась под шаблон, приведу её пример.
<div class="al_nodisplay" id="al_register"> <div id="al_register" class="al_nodisplay"> <h2>Регистрация</h2> <div> <center> <form name="al_registerForm" onsubmit="return false;" id="al_registerForm" action="#" method="post"> <label><input style="width: 140px;margin-bottom:5px;color:#666;text-align:center;" value="имя пользователя" onfocus="if(this.value=='имя пользователя') this.value='';" onblur="if(this.value=='') this.value='имя пользователя';" onkeypress="return al_loginOnEnter(event);" onkeypress="return al_registerOnEnter(event);" type="text" name="user_login" size="18" tabindex="7" /></label><br /> <label><input style="width: 140px;margin-bottom:5px;color:#666;text-align:center;" value="e-mail" onfocus="if(this.value=='e-mail') this.value='';" onblur="if(this.value=='') this.value='e-mail';" onkeypress="return al_loginOnEnter(event);" onkeypress="return al_registerOnEnter(event);" type="text" name="user_email" size="18" tabindex="8" /></label><br /> <input type="button" style="color: #4D5159;margin-bottom:15px;width: 145px" name="submit" value="<?php _e('Регистрация'); ?>" size="18" tabindex="11" onclick="al_register();"/> <br/> <span id="al_registerMessage">пароль будет отправлен на ваш e-mail.</span><br/> <a href="javascript:al_showLogin();">Войти</a> | <a href="javascript:al_showLostPassword();">Забыли пароль?</a> </form> </center> </div> </div> </div>
Выглядит так:
А теперь добавляем наши дополнительные поля, которые мы ввели через плагин.
... /></label><br /> <label><input style="width: 140px;margin-bottom:5px;color:#666;text-align:center;" value="ваша должность" onfocus="if(this.value=='ваша должность') this.value='';" onblur="if(this.value=='') this.value='ваша должность';" type="text" name="dr_" value="" tabindex="9"></label><br /> <label> <select name="dr_deatelnost" style="margin-left:5px;width: 144px;margin-bottom:5px;color:#666;text-align:center;" tabindex="10"> <option value=""> деятельность</option> <option value="творческая">творческая</option> <option value="научная">научная</option> <option value=" учебная"> учебная</option> <option value="предпринимательская">предпринимательская</option> <option value="Другое">Другое</option> </select> </label><br /> <input type="button" ...
Первое поле я сделал обычным текстовым, а второе поле с возможностью выбора, но это уже дело каждого. Оформление так же меняем как душе угодно, главное не забываем про имена (name="dr_deatelnost"), по ним мы будем получать данные.
Перейдём к отлову наших данных (ajaxlogin.js). Находим строчки:
if (al_registerForm.user_email.value == '') { alert("Пожалуйста, введите e-mail адрес!"); al_registerForm.user_email.focus(); return; } al_sack.setVar("user_login", al_registerForm.user_login.value); al_sack.setVar("user_email", al_registerForm.user_email.value);
добавив свои, получим:
if (al_registerForm.user_email.value == '') { alert("Пожалуйста, введите e-mail адрес!"); al_registerForm.user_email.focus(); return; } if (al_registerForm.dr_.value == '' || al_registerForm.dr_.value == 'ваша должность') { alert("Пожалуйста, введите специальность!"); al_registerForm.user_email.focus(); return; } al_sack.setVar("user_login", al_registerForm.user_login.value); al_sack.setVar("user_email", al_registerForm.user_email.value); al_sack.setVar("dr_", al_registerForm.dr_.value); al_sack.setVar("dr_deatelnost", al_registerForm.dr_deatelnost.value);
Последние 2 строчки – это наши новые данные, так же я добавил проверку на незаполненость поля должности, опять таки дело творчества :).
И непосредственно сама регистрация (register.php). Снова ищем нужные нам строчки:
$user_login = sanitize_user( $_POST['user_login'] ); $user_email = apply_filters( 'user_registration_email', $_POST['user_email'] );
Добавляем после них:
$user_dr = $_POST['dr_']; $user_deatelnost = $_POST['dr_deatelnost'];
Мы получили данные, теперь их нужно занести, ищем дальше wp_new_user_notification($user_id, $user_pass); и после неё через функцию update_option() обновляем данные по пользователю:
update_option('dr_', $user_dr); update_option('dr_deatelnost', $user_deatelnost);
Теперь можно опробовать нашу регистрацию, данные должны вноситься в настройки пользователя, теперь осталось разобрать как их выводить. Приведу пример как это сделать на комментариях. За вывод метаданных отвечает the_author_meta(), первый параметр – имя поля, которое хотим вывести, второй – id пользователя. Вставляем в шаблон вывода комментариев (comments.php, если же комментарии выводятся через <?php wp_list_comments(‘callback=имя_функции’);?>, то идём в functions.php и ищем функцию с этим именем) в нужное место код с названием нужного нам поля(в моём случае dr_): <?php the_author_meta('description', $comment->user_id); ?>
Так же можно отправить введёные данные по почте пользователю(только в плагине Register Plus), чтоб он знал, что ввёл, а то мало ли забыл :). Достаточно заполнить форму как хочется, подставив в нужные места теги, которые будут заменяться на вводимые данные.
Так же советую не только чётко следовать инструкциям, но и поэксперементировать с плагинами и их кодом, так что удачи ;).