Расширенная регистрация и профиль пользователя Wordpress
Заметки по Wordpress

Расширенная регистрация и профиль пользователя

В  WordPress версии 3. x  регистрация проходит по простой форме. Вы указываете логин и свою почту, и на нее приходит Ваш пароль от аккаунта.  Многим это администраторам сайта это подходит и устраивает. А кто хочет большего, тогда данной видеоурок, для Вас.  Мы и рассмотрим,  как расширить регистрацию дополнительными полями и вывести их при  редактирование в профиле пользователя.

Видеоурок: Расширенная регистрация и профиль пользователя

[spoiler name=”Необходимые данныеДля открытия – нажмите“]

1. Добавляем дополнительные поля в профиль пользователя:

Делать мы буде это без планигов, редактированием файла  functions.php и так как в большинстве случаев стандартные контакты( aim,jabber)никому не нужны мы не будем их удалять и добавлять нужные нам. Мы просто подменим их на нужные нам, вот пример кода:

add_filter('user_contactmethods', '_my_get_user_contactmethods');
function _my_get_user_contactmethods() {
    $user_contactmethods = array(
        'user_strana' => __('Страна'),
        'user_city' => __('Город')
    );
    return $user_contactmethods;
}

2. Добавляем дополнительные поля при регистрации.

Если Вы хотите что бы пользователи сразу заполняли дополнительные поля, вставим эти поля при регистрации. Делать мы  это будем так же  без планигов, редактированием файла  functions.php вот пример кода:

add_action('register_form','show_fields');
add_action('register_post','check_fields',10,3);
add_action('user_register', 'register_fields');
function show_fields() {  ?>






<?php }
function check_fields ( $login, $email, $errors ) {
global $user_city, $user_strana;
if ($_POST['user_city'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указан город!" );
} else {
$user_city = $_POST['user_city'];
}
if ($_POST['user_strana'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указана страна!" );
} else {
$user_strana = $_POST['user_strana'];
}
}
function register_fields($user_id,$password= "",$meta=array()){
update_user_meta( $user_id, 'user_strana', $_POST['user_strana'] );
update_user_meta( $user_id, 'user_city', $_POST['user_city'] );
}

По аналоги добавляем и другие поля.
[/spoiler]

Продолжение цикла смотрите здесь Выводим дополнительные поля профиля в worpress

Не забываем оставлять свои комментарии : )

Новые посты

Постраничная навигация в CustomPostType без плагина

Гордеев Игорь

Dofollow блоги плюсы и минусы

Гордеев Игорь

Внутренняя перелинковка — Cross-Linker 1.4.4 Русская версия

Гордеев Игорь

78 комментариев

Геннадий 13.02.2012 / 19:30

Спасибо огромнейшее за то, что Вы есть, и что помогли отыскать лабиринтах сети среди разного мусора такой бриллиант, как Ваш ресурс!!! просто и гениально, без всяких плагинов! замечательно!!!

Ответить
Гордеев Игорь 13.02.2012 / 22:11

Спасибо за такой теплый отзыв. Но самое интересное еще впереди. Так что подписывайтесь на обновления что быть в курсе новинок.

Ответить
Виталий 18.02.2012 / 02:29

Здравствуйте, Игорь. Как сделать расширенные поля – понятно, а вот как сделать чтобы при регистрации не на wp-login перекидывало а на скажем отдельную созданную страницу, где пользователь сможет зарегистрироваться, без перенаправления к wp-admin. Встроить нужно форму регистрации на сайте в дизайн сайта.

Ответить
Гордеев Игорь 18.02.2012 / 10:07

Здравствуйте,Виталий.

1. Вам можно сделать блок авторизации, где указать ссылку на выбор:

а. Авторизация и возврат на текущую страницу:

" title="Войти">Войти

б. Авторизация и переход на главную страницу:

" title="Войти">Войти

2. Или же если не разбираетесь в коде то можно воспользоваться плагинами:

Theme My Login – отвечает за переадресовку(и не только) для разных групп пользователей
Theme My Profile – это собственно блок входа(есть и другие надо только искать)

Ответить
Виталий 18.02.2012 / 11:01

Спасибо за помощь, это то что надо =)

Ответить
Роман 26.02.2012 / 20:41

Спасибо большое!

Ответить
Geleosan 03.03.2012 / 20:14

Здравствуйте! А как можно поля aim,jabber спрятать, а два дополнительных поля создать не в разделе Контакты, а например в разделе География? Ну чтобы визуально оно так все отображалось.

Ответить
Гордеев Игорь 03.03.2012 / 21:47

В редактирование профиля не вижу смысла мудрить, в данном посте представлен оптимальный код.Раздел география и так подходит под раздел контакты. А вот в выводе шаблона там можно настроить как вам угодно. как это сделать смотрите здесь Выводим дополнительные поля профиля в worpress

Ответить
Марина 18.04.2012 / 01:41

Игорь, поставила второй код в “функции темы”.
В самом начале. Сайт вообще перестал открываться!
Пришлось обращаться в техподдержку хоста, восстановили из предыдущей версии.
В чем может быть причина?

Ответить
Гордеев Игорь 18.04.2012 / 10:45

Марина, я не могу сказать в чем причина не видя функции вашей темы, т.к. они у всех разные разные. Из самого простейшего, что могу посоветовать поставить код в другом месте например в самый низ.

Ответить
Марина 18.04.2012 / 11:29

Вот эта тема.

Ответить
Гордеев Игорь 18.04.2012 / 12:29

Марина, Марина. Вы ходите, что бы у меня был вывих мозга. Как я должен разобраться в этом во всем (с функцией в комментарии не заключенной в теги кода, и ссылкой на ваш блог). Скиньте архивом вашу тему мне на почту и тогда я смогу нормально глянуть что по чем.

Ответить
Марина 19.04.2012 / 00:57

Хорошо. А как поставить в теги кода? Я нажала Code – потом php. и там где мерцал курсор вставила код. Но он почему-то отобразился сплошняком, без абзацев.

Ответить
Гордеев Игорь 19.04.2012 / 01:08

Судя как вы пишите – вы все делали правильно. Может не сработало потому, что большой код, а может что-то другое. Но что бы лучше разобраться в вашей теме, пришлите мне на почту ваш шаблон.

Ответить
Марина 19.04.2012 / 01:07

Тема называется Admired, Ваш емейл не нашла, архив положила сюда>>.

Ответить
Гордеев Игорь 19.04.2012 / 01:39

Е-mail можно посмотреть в разделе “о нас”. А я завтра постараюсь глянуть вашу тему.

Ответить
Гордеев Игорь 19.04.2012 / 13:55

Марина, все у вас работает в вашей теме. Просто вы наверное плохо разбираетесь в коде. Запомните любой файл php должен начинаться с [plain]< ?php[/plain] и заканчиваться [plain]?>[/plain] . И второй код из данного урока можно поставить либо после открывающего тега либо перед закрывающим тегом.

Ответить
Марина 20.04.2012 / 01:11

Да, Игорь, я, увы, почти не разбираюсь в коде. Код вставляла после <?php. сделала переход на след.строку и вставила. Попробую на каком-нибудь тренировочном сайте (создам на поддомене).

Ответить
Марина 20.04.2012 / 01:17

Все сработало. 🙂 Может быть я не скопировала последнюю фигурную скобочку… ❓
Или вставила после <?php /**… 😈

А как же добавить еще поля? Например Фамилия, номер телефона… ?

Ответить
Гордеев Игорь 20.04.2012 / 11:28

А как же добавить еще поля? Например Фамилия, номер телефона… ?

Марина, для чего я снимал видеоурок, там все рассказано. Делается все по аналоги как и с страной, и с городом.

Ответить
Марина 20.04.2012 / 21:29

ОК, посмотрела. Вижу, что смогу!!! 🙂
Игорь, скажите, а нельзя сделать так, чтоб пользователь свой пароль вводил при регистрации, а не получал на почту?
Как везде почти сделано. Это наверное трудно?

Ответить
Гордеев Игорь 20.04.2012 / 23:01

Возможно можно, только я не искал. Не вижу в этом особо глубокого смысла, что бы копаться с движком. Кому надо всегда могут поменять в профиле пароль на свой.

Ответить
Марина 20.04.2012 / 23:19

Они не меняют в большинстве своем. Потом не помнят, и регятся заново! Эхе-хе…))

Ответить
Марина 20.04.2012 / 21:39

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

Подобное делают в поле с номером телефона, например.

Ответить
Марина 20.04.2012 / 23:52

Вот еще вопрос остался… ?

Ответить
Гордеев Игорь 21.04.2012 / 01:00

На данный вопрос у меня пока нет ответа, т.к. php я еще сам тока изучаю и мои знания к сожалению пока не сильно глубоки. Как у меня получится я сразу напишу.

Ответить
Марина 21.04.2012 / 01:37

Ну хорошо. Подпишусь на ваши новости.

Ответить
Гордеев Игорь 23.04.2012 / 15:21

Вот такой код надо прописать для проверки написания телефона.

if (strlen($_POST['user_phone']) < 6
|| !is_numeric($_POST['user_phone'])){
   $errors->add( 'empty_userphone', "ОШИБКА:Телефон должен состоять минимум из 6 цифр" );
}
Марина 20.04.2012 / 21:43

А что будет, если я при регистрации добавлю поля – Имя, Фамилия, а
они ведь есть в профиле (только никто их не заполняет потом).
Они там второй раз не появятся?

Ответить
Гордеев Игорь 20.04.2012 / 23:05

Что поля не дублировались в профиле, надо и брать те значение которые там уже используются. Для имени – first_name, для фамилии – last_name.

Ответить
Марина 20.04.2012 / 23:18

Точно. Но ведь там не видно названия полей по латыни? Только по-русски.
Я щелкнула правой кнопкой по страничке и выбрала “показать код”. Так искать? Или есть другой способ?

Ответить
Марина 20.04.2012 / 23:24

Впрочем, кроме этих двух полей там нечему повторяться. Вопрос снят. 🙂

Ответить
Гордеев Игорь 21.04.2012 / 00:53

Да, можете воспользоваться этим способом, хотя есть и другие.

Ответить
Марина 20.04.2012 / 22:02

И еще вопрос – а нужно вручную добавлять вот в эту строчку новые поля, или они добавятся сами?
global $user_city, $user_strana, $user_imya, $user_familija;
?

Ответить
Гордеев Игорь 20.04.2012 / 23:13

Делайте по аналоги как вышеуказанном коде. Если вам надо, что бы выводилась сообщение об ошибке то в ф-цию global надо заносить значения нужного вам поля. Делайте на примере полей $user_city и $user_strana.

Ответить
Марина 20.04.2012 / 23:16

Да, я так и сделала. Спасибо! Все работает. Класс, чувствую себя, с Вашей помощью, волшебником. ))

Ответить
Марина 21.04.2012 / 00:21

Я уже явно превысила лимит “почувствуй себя дураком на пять минут”… ))
Что-то у меня фамилию никак не принимает. Я ввожу, а он мне пишет: Ошибка! Не указана фамилия!
Вроде все одинаково для всех полей делала…
Если есть возможность, посмотрите? Вот мой код в блокноте здесь>>
Реализовывала на этом сайте.

Ответить
Гордеев Игорь 21.04.2012 / 00:52

У вас 2 ошибки в коде:

1. где выводиться поле фамилия, у переменой допущен лишний пробел [plain]user_ last_name[/plain]. Поэтому и выдает постоянно ошибку.
2. Я же написал надо использовать для имени – first_name, для фамилии – last_name, без user_ иначе у вас поля будут дублироваться в профиле.

Ответить
Марина 21.04.2012 / 01:54

Ошибки исправила. Все работало. Регистрация прошла.
Но. Поля – город и страна в профиле не отображаются. Для этого же надо тот, верхний кусочек кода добавить?

add_filter('user_contactmethods', '_my_get_user_contactmethods');
function _my_get_user_contactmethods() {
$user_contactmethods = array(
'user_strana' => __('Страна'),
'user_city' => __('Город')
);
return $user_contactmethods;
}

Результат – Сайт опять перестал открываться! Что ж теперь не так? Или обращаться на хостинг, чтоб откатали назад? Или можно что-то исправить в коде?
Код поставила вначале, после <?php

Ответить
Марина 21.04.2012 / 01:56

А как должна срабатывать кнопка “код”? Что-то опять все в кучу сбилось, хотя вставляла в теги .

Ответить
Гордеев Игорь 21.04.2012 / 09:52

Надо выделить весь код и нажать на кнопку “код”.

Ответить
Гордеев Игорь 21.04.2012 / 10:03

Результат – Сайт опять перестал открываться! Что ж теперь не так?

Марина, не пойму что вы делаете не так. Я только что вставил этот код в вашей теме, сразу после

Ответить
Марина 21.04.2012 / 10:41

Сделала еще раз. Все получилось. причины неудачи, к сожалению, не узнала.
Теперь поля отображаются в профиле, все нормально.
Спасибо Вам за помощь и терпение!

PS: А они (новые поля) не должны появиться в таблице “Все пользователи”?
Нужно заходить в профиль, чтоб увидеть?

Ответить
Гордеев Игорь 21.04.2012 / 10:46

нет в таблице они не появятся, только в самом профиле.

Ответить
Марина 23.04.2012 / 11:21

Добавила еще одно поле, и опять сайт мой исчез!
выдает строку – “неверный синтаксис кода, строка такая-то…”
Я действительно поискала, и убрала два лишних пробела.
После этого – все глаза проглядела – не могу найти ошибки!
Обратилась в службу хостинга, они исправили, но причину, увы, я так и не узнала…

Вижу, что надо изучать основы – какой-нибудь учебник по php.
Вы можете что-то посоветовать? Какой-то курс, или учебник по которому можно выучить основы?

Ответить
Гордеев Игорь 23.04.2012 / 12:14

Хороший видеокурс есть у Попова Евгения PHP+MySQL для начинающих. Из книжек не знаю, что порекомендовать т.к. их целое море и читать их времени нет.

Ответить
Марина 23.04.2012 / 16:30

Вот такой код надо прописать для проверки написания телефона.

Ух ты! Круто! А где его вставить нужно?

Ответить
Гордеев Игорь 23.04.2012 / 17:35

Все делать надо по аналогии, рассмотреть можно на примере поля “Город” для этого замените:

if ($_POST['user_city'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указан город!" );
} else {
$user_city = $_POST['user_city'];
} 

на код

if (strlen($_POST['user_phone']) < 6
|| !is_numeric($_POST['user_phone'])){
   $errors->add( 'empty_userphone', "ОШИБКА:Телефон должен состоять минимум из 6 цифр" );
}

где 6 – количество знаков

Ответить
Vlad 25.04.2012 / 06:31

Здравствуйте Игорь. Если Вас не затруднит, буду благодарен за помощь. Необходимо реализовать дополнительное поле СТРАНА но чтоб пользователь выбирал страну из выпадающего списка стран свою. Буду очень признателен за помощь. С уважением Влад.

Ответить
Гордеев Игорь 03.05.2012 / 13:44

Влад, раньше я делал такое такое, но сейчас забыл как это у меня получилось. К сожалению поколдовав с кодом так и не добился нужного результата. 🙁

Ответить
Сергей 16.06.2012 / 00:07

Здравствуйте Игорь!!! Не получается поменять в админке дополнительные поля. Первый код ставил, никаких изменений вообще в профиле. Второй код ставлю, сайт не открывается, выдаёт ошибку. Помогите…

Ответить
Сергей 17.06.2012 / 01:30

Обновил вордпресс до последней версии. Первый код нормально вставился, поля в админке отображаются. Второй код никак не хочет вставать, даёт синтаксическую ошибку. Как исправить ???

Ответить
Сергей 18.06.2012 / 22:55

Вопрос снят, методом тыка разобрался. Код заработал

Ответить
Олег 08.07.2012 / 15:51

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

Ответить
Гордеев Игорь 09.07.2012 / 16:58

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

Ответить
Igor Rebega 21.07.2012 / 14:41

Ну а радиокнопку как вставить?

Ответить
Гордеев Игорь 23.07.2012 / 12:22

Данным методом радиокнопку не сделать. Что бы реализовать надо совсем другой код, раньше на одном сайте делал так, но это было давно и сейчас я к сожалению уже не помню.

Ответить
Дима 01.08.2012 / 14:25

Мне кажется что во втором коде у вас опечатка:

я убрал этот бэкслеш и код заработал, так же и во второй строке

Ответить
Гордеев Игорь 01.08.2012 / 16:07

Спасибо, да была опечатка ?/> … ох уж эти плагины форматирования кода

Ответить
Саша 02.09.2012 / 01:15

Как сделать так, чтобы над формой регистрации висело сообщение с выбранным мною текстом ??

Ответить
Гордеев Игорь 03.09.2012 / 15:35

Попробуйте этот вариант Замена логотипа wordpress только вместо логотипа поставить текст.

Ответить
Саша 03.09.2012 / 16:36

Это не совсем то… Мне нужно чтобы там висело сообщение подобно вашего “ОШИБКА: Не указан город!”
Хочу сделать предупреждение о том что использовать почту @ukr.net не рекомендуется

Ответить
Саша 02.09.2012 / 01:18

и ещё, не сталкивались ли вы с подобной проблемой:
на почду @ukr.net письма не приходят…
Как её можна решить ?

Ответить
Гордеев Игорь 03.09.2012 / 15:36

нет данной почтой не пользовался

Ответить
BASoftWARe 06.10.2012 / 04:51

Всем привет. Вот наконец и я внесу вклад в ваш сайт. Наверно многих интересует как изменить в форме входа а особенно в форме регистрации поле “Имя пользователя”
Так как там таких два и при регистрации пользователей часто смущает это они не понимают в каком из полей писать свое имя или почему 2 раза надо писать. 😳
Поле “Имя пользователя” это логин который вы будете использовать для входа на сайт (оно заполняется латиницей и цифрами). Итак сам код 😉

	add_filter('gettext', 'replace_default_strings');
function replace_default_strings($text){
	$search = array(
		'Имя пользователя'
	);
	$replace = array(
		'Пин код карты 111111111'
	);
	return str_replace($search, $replace, $text);
	}
Ответить
Гордеев Игорь 06.10.2012 / 10:01

BASoftWARe, спасибо за вклад для нашего блога, действительно это может кому-нибудь пригодится.

Ответить
BASoftWARe 06.10.2012 / 17:35

Подскажите как вывести профиль пользователя на отдельную страницу?
Что бы пользователь вообще не попадал в админ панель, то есть если он захочет посмотреть свой профиль или отредактировать его то при нажатие на ссылку “Мой профиль” он не попадал в админку а профиль его загружался на обычной странице и там он мог менять его или как полностью скрыть админ панель ДЛЯ ПОЛЬЗОВАТЕЛЯ? (как скрыть саму панель я знаю, но тогда и админ не сможет её видеть, если кто знает как скрыть её только для пользователя буду признателен если поделетись

Ответить
Гордеев Игорь 06.10.2012 / 19:28

Theme My Login – с помощью этого плагина можно сделать профиль пользователя на самом плагине, настройки под каждую группу пользователей.

Ответить
BASoftWARe 07.10.2012 / 05:15

Дико извиняюсь, сразу не написал, как это можно реализовать без плагинов? Уже привык, что тут обсуждаем напрямую коды. А так с плагинами конечно можно всё, даже не париться, поставил настроил (drag and drop так сказать) и забыл. Просто меня интересует без плагинов всё это делать, хочу, чтобы на сайте были только те плагины без которых ну никак 🙂

Ответить
Гордеев Игорь 08.10.2012 / 12:26

Как сделать профиль на странице без плагина я не знаю не искал данное решение т.к. для одного проекта мне и хватило плагина. А вот как отключить админ-панель читайте в этом посте Как отключить админ-панель в WordPress для всех кроме администраторов

Ответить
Surik33 20.12.2012 / 12:26

Извиняюсь если не по теме. Как можно сделать так, чтобы после регистрации на сайте, пароль не высылался автоматически. А приходил мне на почту, после проверки всех данных, я бы высылал его сам.
Заранее спасибо.

Ответить
Гордеев Игорь 24.12.2012 / 13:11

Не могу вам подсказать, не сталкивался с таким решением.

Ответить
VRS 07.02.2013 / 03:04

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

add_filter('user_contactmethods', 'snup_new_contact_fields');  // - зарегистрировать в админке.
add_action('user_register', 'snup_register_new_fields');       // - обработка сохранения значений.
add_action('register_form', 'snup_show_new_register_fields');  // - показать новые поля в форме.
 
# Регистрируем новые и скрываем старые поля:
function snup_new_contact_fields( $contactmethods ) {
   
  unset($contactmethods['url']);  
  unset($contactmethods['yim']);                               // - убираем Yahoo IM.
  unset($contactmethods['aim']);                               // - убираем AIM.
  unset($contactmethods['jabber']);                            // - убираем Jabber/Google Talk.
  return $contactmethods;                                      // - возвращаем результат.
}
 
# Сохраняем по идентификатору пользователя новые поля:
function snup_register_new_fields($user_id, $password = '', $meta = array()) {
  $userdata = array();                                         // - объявляем массив полей профиля.
  $userdata['ID'] = $user_id;                                  // - получаем идентификатор юзера.
  $userdata['description'] = $_POST['description']; 
  $userdata['snup_twitter'] = $_POST['snup_twitter'];          // - получаем Twitter.
  $userdata['snup_facebook'] = $_POST['snup_facebook'];        // - получаем Facebook.
  $new_user_id = wp_update_user($userdata);                    // - обновляем информацию.
}
 
# Выводим/добавляем новые поля в форму регистрации:
function snup_show_new_register_fields() { ?>
Пожалуйста, в нескольких предложениях опишите цель регистрации на сайте:  
add( 'empty_realname', "Укажите, пожалуйста, цель регистрации!" );
} else {
$userdata['description'] = $_POST['description'];
} }

Пробелы+звездочки вставила чтобы код здесь не читался, в файле их нет, ессно.

Попробовала – зарегилось с пустым :(..

Ответить
Гордеев Игорь 07.02.2013 / 12:44

Не совсем понял, что Вы от меня хотите и почему ваш код не работает.

Могу Вам посоветовать не мучатся и воспользоваться моим кодом. А то есть убрать поле о себе и создать новое обязательное поле “цель регистрации”.

Ответить
VRS 07.02.2013 / 18:49

Моя логика (может быть и женская) – зачем делать два действия – удалять, потом новое создавать, когда можно одним действием просто переименовать существующее поле.
Сравнив коды, я решила вопрос, оказывается пропустила add_action(‘register_post’,’check_fields’,10,3);

Ответить
Айрат 11.11.2014 / 18:39

Здравствуйте как сделать так чтобы пользователь зарегился и не мог редактировать свой профиль только редактировал админ?

Ответить
Гордеев Игорь 13.11.2014 / 15:13

Слету не скажу, надо искать плагин отвечающий за права пользователей. Видел такие в интернете, точно как называется не скажу.

Ответить
Александр 07.09.2016 / 21:58

Спасибо за ваш урок, по нему сделал, все заработало.
Остался вопрос.
Как добавить данное поле на страницу wp-admin/user-new.php.

Ответить

Оставить комментарий