Расширяем регистрацию

Сегодня я расскажу, как расширить регистрацию дополнительными полями и подружить эти поля с ajax-login(удобный плагин, позволяющий выводить форму регистрации и логина непосредственно на страницу).

Для расширения регистрации я нашёл два плагина: DRegister и Register Plus.

Первый самый простой, в нём есть возможность только добавлять поля при регистрации и выбрать пункт, обязательны ли эти поля для заполнения или нет. Есть один нюанс – ключ (имя) поля плагин составляет из приставки dr_ и названия поля, которое вы введёте, но русский язык не воспринимается, поэтому я рекомендую сначала заполнить название на латинице, а потом уже поменять его на русское.

DRegister опции
Поля DRegister при регистрации
Поля DRegister в профиле пользователя

Второй обладает более расширенными настройками, среди которых такие как:

  • 1) Возможность добавления капчи
  • 2) Настройка письма уведомления пользователя
  • 3) Регистрация только по инвайт-кодам
  • 4) Вывод лицензионного соглашения
  • 5) Добавление дополнительных полей не только при регистрации, но и просто в персональные настройки пользователя.

Здесь та же проблема, что и в первом плагине, нужно писать имена полей на латинице, иначе поле останется вообще без имени.

Register Plus опции
Поля Register Plus при регистрации
Добавление дополнительных полей

После добавления нужных нам полей перейдём к 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>

Выглядит так:

AjaxLogin изменённая форма регистрации

А теперь добавляем наши дополнительные поля, которые мы ввели через плагин.

... /></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), чтоб он знал, что ввёл, а то мало ли забыл :). Достаточно заполнить форму как хочется, подставив в нужные места теги, которые будут заменяться на вводимые данные.

Изменение уведомительного письма

Так же советую не только чётко следовать инструкциям, но и поэксперементировать с плагинами и их кодом, так что удачи ;).

Добавить комментарий

Ваш e-mail не будет опубликован.