В 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
Не забываем оставлять свои комментарии : )
78 комментариев
Спасибо огромнейшее за то, что Вы есть, и что помогли отыскать лабиринтах сети среди разного мусора такой бриллиант, как Ваш ресурс!!! просто и гениально, без всяких плагинов! замечательно!!!
Спасибо за такой теплый отзыв. Но самое интересное еще впереди. Так что подписывайтесь на обновления что быть в курсе новинок.
Здравствуйте, Игорь. Как сделать расширенные поля – понятно, а вот как сделать чтобы при регистрации не на wp-login перекидывало а на скажем отдельную созданную страницу, где пользователь сможет зарегистрироваться, без перенаправления к wp-admin. Встроить нужно форму регистрации на сайте в дизайн сайта.
Здравствуйте,Виталий.
1. Вам можно сделать блок авторизации, где указать ссылку на выбор:
а. Авторизация и возврат на текущую страницу:
б. Авторизация и переход на главную страницу:
2. Или же если не разбираетесь в коде то можно воспользоваться плагинами:
Theme My Login – отвечает за переадресовку(и не только) для разных групп пользователей
Theme My Profile – это собственно блок входа(есть и другие надо только искать)
Спасибо за помощь, это то что надо =)
Спасибо большое!
Здравствуйте! А как можно поля aim,jabber спрятать, а два дополнительных поля создать не в разделе Контакты, а например в разделе География? Ну чтобы визуально оно так все отображалось.
В редактирование профиля не вижу смысла мудрить, в данном посте представлен оптимальный код.Раздел география и так подходит под раздел контакты. А вот в выводе шаблона там можно настроить как вам угодно. как это сделать смотрите здесь Выводим дополнительные поля профиля в worpress
Игорь, поставила второй код в “функции темы”.
В самом начале. Сайт вообще перестал открываться!
Пришлось обращаться в техподдержку хоста, восстановили из предыдущей версии.
В чем может быть причина?
Марина, я не могу сказать в чем причина не видя функции вашей темы, т.к. они у всех разные разные. Из самого простейшего, что могу посоветовать поставить код в другом месте например в самый низ.
Вот эта тема.
Марина, Марина. Вы ходите, что бы у меня был вывих мозга. Как я должен разобраться в этом во всем (с функцией в комментарии не заключенной в теги кода, и ссылкой на ваш блог). Скиньте архивом вашу тему мне на почту и тогда я смогу нормально глянуть что по чем.
Хорошо. А как поставить в теги кода? Я нажала Code – потом php. и там где мерцал курсор вставила код. Но он почему-то отобразился сплошняком, без абзацев.
Судя как вы пишите – вы все делали правильно. Может не сработало потому, что большой код, а может что-то другое. Но что бы лучше разобраться в вашей теме, пришлите мне на почту ваш шаблон.
Тема называется Admired, Ваш емейл не нашла, архив положила сюда>>.
Е-mail можно посмотреть в разделе “о нас”. А я завтра постараюсь глянуть вашу тему.
Марина, все у вас работает в вашей теме. Просто вы наверное плохо разбираетесь в коде. Запомните любой файл php должен начинаться с [plain]< ?php[/plain] и заканчиваться [plain]?>[/plain] . И второй код из данного урока можно поставить либо после открывающего тега либо перед закрывающим тегом.
Да, Игорь, я, увы, почти не разбираюсь в коде. Код вставляла после <?php. сделала переход на след.строку и вставила. Попробую на каком-нибудь тренировочном сайте (создам на поддомене).
Все сработало. 🙂 Может быть я не скопировала последнюю фигурную скобочку… ❓
Или вставила после <?php /**… 😈
А как же добавить еще поля? Например Фамилия, номер телефона… ?
Марина, для чего я снимал видеоурок, там все рассказано. Делается все по аналоги как и с страной, и с городом.
ОК, посмотрела. Вижу, что смогу!!! 🙂
Игорь, скажите, а нельзя сделать так, чтоб пользователь свой пароль вводил при регистрации, а не получал на почту?
Как везде почти сделано. Это наверное трудно?
Возможно можно, только я не искал. Не вижу в этом особо глубокого смысла, что бы копаться с движком. Кому надо всегда могут поменять в профиле пароль на свой.
Они не меняют в большинстве своем. Потом не помнят, и регятся заново! Эхе-хе…))
Игорь, а как какому-то полю задать условие – например, регистрирующийся должен ввести особый код. И он – определенное количество цифр. И если он ошибся в количестве, то ему выдавалось бы предупреждение – некорректный код.
Подобное делают в поле с номером телефона, например.
Вот еще вопрос остался… ?
На данный вопрос у меня пока нет ответа, т.к. php я еще сам тока изучаю и мои знания к сожалению пока не сильно глубоки. Как у меня получится я сразу напишу.
Ну хорошо. Подпишусь на ваши новости.
Вот такой код надо прописать для проверки написания телефона.
А что будет, если я при регистрации добавлю поля – Имя, Фамилия, а
они ведь есть в профиле (только никто их не заполняет потом).
Они там второй раз не появятся?
Что поля не дублировались в профиле, надо и брать те значение которые там уже используются. Для имени – first_name, для фамилии – last_name.
Точно. Но ведь там не видно названия полей по латыни? Только по-русски.
Я щелкнула правой кнопкой по страничке и выбрала “показать код”. Так искать? Или есть другой способ?
Впрочем, кроме этих двух полей там нечему повторяться. Вопрос снят. 🙂
Да, можете воспользоваться этим способом, хотя есть и другие.
И еще вопрос – а нужно вручную добавлять вот в эту строчку новые поля, или они добавятся сами?
global $user_city, $user_strana, $user_imya, $user_familija;
?
Делайте по аналоги как вышеуказанном коде. Если вам надо, что бы выводилась сообщение об ошибке то в ф-цию global надо заносить значения нужного вам поля. Делайте на примере полей $user_city и $user_strana.
Да, я так и сделала. Спасибо! Все работает. Класс, чувствую себя, с Вашей помощью, волшебником. ))
Я уже явно превысила лимит “почувствуй себя дураком на пять минут”… ))
Что-то у меня фамилию никак не принимает. Я ввожу, а он мне пишет: Ошибка! Не указана фамилия!
Вроде все одинаково для всех полей делала…
Если есть возможность, посмотрите? Вот мой код в блокноте здесь>>
Реализовывала на этом сайте.
У вас 2 ошибки в коде:
1. где выводиться поле фамилия, у переменой допущен лишний пробел [plain]user_ last_name[/plain]. Поэтому и выдает постоянно ошибку.
2. Я же написал надо использовать для имени – first_name, для фамилии – last_name, без user_ иначе у вас поля будут дублироваться в профиле.
Ошибки исправила. Все работало. Регистрация прошла.
Но. Поля – город и страна в профиле не отображаются. Для этого же надо тот, верхний кусочек кода добавить?
Результат – Сайт опять перестал открываться! Что ж теперь не так? Или обращаться на хостинг, чтоб откатали назад? Или можно что-то исправить в коде?
Код поставила вначале, после <?php
А как должна срабатывать кнопка “код”? Что-то опять все в кучу сбилось, хотя вставляла в теги .
Надо выделить весь код и нажать на кнопку “код”.
Марина, не пойму что вы делаете не так. Я только что вставил этот код в вашей теме, сразу после
Сделала еще раз. Все получилось. причины неудачи, к сожалению, не узнала.
Теперь поля отображаются в профиле, все нормально.
Спасибо Вам за помощь и терпение!
PS: А они (новые поля) не должны появиться в таблице “Все пользователи”?
Нужно заходить в профиль, чтоб увидеть?
нет в таблице они не появятся, только в самом профиле.
Добавила еще одно поле, и опять сайт мой исчез!
выдает строку – “неверный синтаксис кода, строка такая-то…”
Я действительно поискала, и убрала два лишних пробела.
После этого – все глаза проглядела – не могу найти ошибки!
Обратилась в службу хостинга, они исправили, но причину, увы, я так и не узнала…
Вижу, что надо изучать основы – какой-нибудь учебник по php.
Вы можете что-то посоветовать? Какой-то курс, или учебник по которому можно выучить основы?
Хороший видеокурс есть у Попова Евгения PHP+MySQL для начинающих. Из книжек не знаю, что порекомендовать т.к. их целое море и читать их времени нет.
Ух ты! Круто! А где его вставить нужно?
Все делать надо по аналогии, рассмотреть можно на примере поля “Город” для этого замените:
на код
где 6 – количество знаков
Здравствуйте Игорь. Если Вас не затруднит, буду благодарен за помощь. Необходимо реализовать дополнительное поле СТРАНА но чтоб пользователь выбирал страну из выпадающего списка стран свою. Буду очень признателен за помощь. С уважением Влад.
Влад, раньше я делал такое такое, но сейчас забыл как это у меня получилось. К сожалению поколдовав с кодом так и не добился нужного результата. 🙁
Здравствуйте Игорь!!! Не получается поменять в админке дополнительные поля. Первый код ставил, никаких изменений вообще в профиле. Второй код ставлю, сайт не открывается, выдаёт ошибку. Помогите…
Обновил вордпресс до последней версии. Первый код нормально вставился, поля в админке отображаются. Второй код никак не хочет вставать, даёт синтаксическую ошибку. Как исправить ???
Вопрос снят, методом тыка разобрался. Код заработал
Доброго времени суток. Подскажите пожалуйста, как можно сделать так, чтобы при регистрации, пользователь мог согласиться или отказаться от почтовой рассылки новостей сайта?
Данный вопрос я не исследовал, так что подсказать не могу.
Ну а радиокнопку как вставить?
Данным методом радиокнопку не сделать. Что бы реализовать надо совсем другой код, раньше на одном сайте делал так, но это было давно и сейчас я к сожалению уже не помню.
Мне кажется что во втором коде у вас опечатка:
я убрал этот бэкслеш и код заработал, так же и во второй строке
Спасибо, да была опечатка
?/>
… ох уж эти плагины форматирования кодаКак сделать так, чтобы над формой регистрации висело сообщение с выбранным мною текстом ??
Попробуйте этот вариант Замена логотипа wordpress только вместо логотипа поставить текст.
Это не совсем то… Мне нужно чтобы там висело сообщение подобно вашего “ОШИБКА: Не указан город!”
Хочу сделать предупреждение о том что использовать почту @ukr.net не рекомендуется
и ещё, не сталкивались ли вы с подобной проблемой:
на почду @ukr.net письма не приходят…
Как её можна решить ?
нет данной почтой не пользовался
Всем привет. Вот наконец и я внесу вклад в ваш сайт. Наверно многих интересует как изменить в форме входа а особенно в форме регистрации поле “Имя пользователя”
Так как там таких два и при регистрации пользователей часто смущает это они не понимают в каком из полей писать свое имя или почему 2 раза надо писать. 😳
Поле “Имя пользователя” это логин который вы будете использовать для входа на сайт (оно заполняется латиницей и цифрами). Итак сам код 😉
BASoftWARe, спасибо за вклад для нашего блога, действительно это может кому-нибудь пригодится.
Подскажите как вывести профиль пользователя на отдельную страницу?
Что бы пользователь вообще не попадал в админ панель, то есть если он захочет посмотреть свой профиль или отредактировать его то при нажатие на ссылку “Мой профиль” он не попадал в админку а профиль его загружался на обычной странице и там он мог менять его или как полностью скрыть админ панель ДЛЯ ПОЛЬЗОВАТЕЛЯ? (как скрыть саму панель я знаю, но тогда и админ не сможет её видеть, если кто знает как скрыть её только для пользователя буду признателен если поделетись
Theme My Login – с помощью этого плагина можно сделать профиль пользователя на самом плагине, настройки под каждую группу пользователей.
Дико извиняюсь, сразу не написал, как это можно реализовать без плагинов? Уже привык, что тут обсуждаем напрямую коды. А так с плагинами конечно можно всё, даже не париться, поставил настроил (drag and drop так сказать) и забыл. Просто меня интересует без плагинов всё это делать, хочу, чтобы на сайте были только те плагины без которых ну никак 🙂
Как сделать профиль на странице без плагина я не знаю не искал данное решение т.к. для одного проекта мне и хватило плагина. А вот как отключить админ-панель читайте в этом посте Как отключить админ-панель в WordPress для всех кроме администраторов
Извиняюсь если не по теме. Как можно сделать так, чтобы после регистрации на сайте, пароль не высылался автоматически. А приходил мне на почту, после проверки всех данных, я бы высылал его сам.
Заранее спасибо.
Не могу вам подсказать, не сталкивался с таким решением.
Подскажите, пожалуйста, в чем ошибка.
пытаюсь модифицировать код, чтобы вывести в форму регистрации предустановленное в ВП поле “О себе”, но чтобы оно было обязательным..
Пробелы+звездочки вставила чтобы код здесь не читался, в файле их нет, ессно.
Попробовала – зарегилось с пустым :(..
Не совсем понял, что Вы от меня хотите и почему ваш код не работает.
Могу Вам посоветовать не мучатся и воспользоваться моим кодом. А то есть убрать поле о себе и создать новое обязательное поле “цель регистрации”.
Моя логика (может быть и женская) – зачем делать два действия – удалять, потом новое создавать, когда можно одним действием просто переименовать существующее поле.
Сравнив коды, я решила вопрос, оказывается пропустила add_action(‘register_post’,’check_fields’,10,3);
Здравствуйте как сделать так чтобы пользователь зарегился и не мог редактировать свой профиль только редактировал админ?
Слету не скажу, надо искать плагин отвечающий за права пользователей. Видел такие в интернете, точно как называется не скажу.
Спасибо за ваш урок, по нему сделал, все заработало.
Остался вопрос.
Как добавить данное поле на страницу wp-admin/user-new.php.