Как отредактировать профиль пользователя на лицевой стороне?
Как редактировать профиль пользователя в интерфейсе с помощью формы?
имя, фамилия, имя пользователя, адрес электронной почты и пароль
1 ответ
88
Вы можете сделать это, скопировав страницу page.php вашей темы в новый файл с именем something-user-profile.php и добавив к самому верху этого кода:
& л;? PHP
/**
* Название шаблона: профиль пользователя
*
* Разрешить пользователям обновлять свои профили из Frontend.
*
* /
/* Получить информацию о пользователе. * /
глобальный $ current_user, $ wp_roles;
//get_currentuserinfo (); //устарел с 3.1
/* Загрузите файл регистрации. * /
//require_once (ABSPATH. WPINC. '/registration.php); //устарел с 3.1
$ error = array ();
/* Если профиль сохранен, обновите профиль. * /
if ('POST' == $ _SERVER ['REQUEST_METHOD'] & &! empty ($ _POST ['action']) & & $ _POST ['action'] == 'update-user') {
/* Обновить пароль пользователя. * /
if (! empty ($ _ POST ['pass1']) & &! empty ($ _POST ['pass2'])) {
if ($ _POST ['pass1'] == $ _POST ['pass2'])
wp_update_user (массив ('ID' => $ current_user-> ID, 'user_pass' => esc_attr ($ _POST ['pass1'])));
еще
$ error [] = __ ('Введенные вами пароли не совпадают. Ваш пароль не обновлялся.', 'profile');
}
/* Обновление информации о пользователе. * /
if (! empty ($ _POST ['url']))
wp_update_user (массив ('ID' => $ current_user-> ID, 'user_url' => esc_url ($ _POST ['url'])));
if (! empty ($ _POST ['email'])) {
if (! is_email (esc_attr ($ _POST ['email'])))
$ error [] = __ ('Введенная вами электронная почта недействительна. Повторите попытку.', 'profile');
elseif (email_exists (esc_attr ($ _POST ['email']))! = $ current_user-> id)
$ error [] = __ ('Это письмо уже используется другим пользователем. попробуйте другой.', 'profile');
еще {
wp_update_user (массив ('ID' => $ current_user-> ID, 'user_email' => esc_attr ($ _POST ['email'])));
}
}
if (! empty ($ _POST ['first-name']))
update_user_meta ($ current_user-> ID, 'first_name', esc_attr ($ _POST ['first-name']));
if (! empty ($ _POST ['last-name']))
update_user_meta ($ current_user-> ID, 'last_name', esc_attr ($ _POST ['last-name']));
if (! empty ($ _POST ['description']))
update_user_meta ($ current_user-> ID, 'description', esc_attr ($ _POST ['description']));
/* Перенаправить, чтобы страница отображала обновленную информацию. * /
/* Я не являюсь автором этого кода - я не знаю, почему, но он работал для меня после смены ниже строки на if (count ($ error) == 0) {* /
if (count ($ error) == 0) {
//action hook для добавления плагинов и дополнительных полей
do_action ('edit_user_profile_update', $ current_user-> ID);
wp_redirect (get_permalink ());
Выход;
}
}
? >
затем замените цикл этой страницы на этот:
<? php if (has_posts ()): while (has_posts ()): the_post (); ? >
<div id = "post- <? php the_ID ();>>>>
<div class = "entry-content entry">
<? php the_content (); ? >
<? php, если (! is_user_logged_in ()):?>
<p class = "warning">
<? php _e ('Вы должны войти в систему, чтобы редактировать свой профиль.', 'profile'); ? >
</p> <! - .warning ->
<php else:>
<? php if (count ($ error)> 0) echo '<p class = "error">' , implode ("<br />", ошибка $). '& Л; /р >'; ? >
<form method = "post" id = "adduser" action = "<? php the_permalink ();?>"> ">
<p class = "form-username">
<label for = "first-name"> <? php _e ('Имя', 'Профиль'); ? > & Lt; /этикетки >
<input class = "text-input" name = "first-name" type = "text" id = "first-name" value = "<? php the_author_meta ('first_name', $ current_user-> ID); ? >» />
</p> <! - .form-username ->
<p class = "form-username">
<label for = "last-name"> <? php _e ('Фамилия', 'Профиль'); ? > & Lt; /этикетки >
<input class = "text-input" name = "last-name" type = "text" id = "last-name" value = "<? php the_author_meta ('last_name', $ current_user-> ID); ? >» />
</p> <! - .form-username ->
<p class = "form-email">
<label for = "email"> <? php _e ('E-mail *', 'profile'); ? > & Lt; /этикетки >
<input class = "text-input" name = "email" type = "text" id = "email" value = "<? php the_author_meta ('user_email', $ current_user-> ID);> />
</p> <! - .form-email ->
<p class = "form-url">
<label for = "url"> <? php_e ('Website', 'profile'); ? > & Lt; /этикетки >
<input class = "text-input" name = "url" type = "text" id = "url" value = "<? php the_author_meta ('user_url', $ current_user-> ID);> /></p> <! - .form-url ->
<p class = "form-password">
<label for = "pass1"> <? php _e ('Пароль *', 'профиль'); ? > & Lt; /этикетки >
<input class = "text-input" name = "pass1" type = "password" id = "pass1" />
</p> <! - .form-password ->
<p class = "form-password">
<label for = "pass2"> <? php _e ('Repeat Password *', 'profile'); ? > & Lt; /этикетки >
<input class = "text-input" name = "pass2" type = "password" id = "pass2" />
</p> <! - .form-password ->
<p class = "form-textarea">
<label for = "description"> <& php;> <& quot; & quot; </label>
<textarea name = "description" id = "description" rows = "3" cols = "50"> <? php the_author_meta ('description', $ current_user-> ID); ? > & Lt; /& TextArea GT;
</p> <! - .form-textarea ->
& Lt;? PHP
//action hook для плагина и дополнительных полей
do_action ( 'edit_user_profile', $ current_user);
? >
<p class = "form-submit">
<? php echo $ referer; ? >
<input name = "updateuser" type = "submit" id = "updateuser" class = "submit button" value = "<? php _e ('Update', 'profile');?>" />
<? php wp_nonce_field ('update-user')?>
<input name = "action" type = "hidden" id = "action" value = "update-user" />
</<! - .form-submit ->
</form> <! - #adduser ->
<? php endif; ? >
</div> <! - .entry-content ->
</div> <! - .hentry .post ->
<? php endwhile; ? >
<php else:>
<p class = "no-data">
<? php _e ('Извините, ни одна страница не соответствует вашим критериям.', 'profile'); ? >
</> <! - .no-data ->
<? php endif; ? >
и все, что вам нужно сделать, это создать новую страницу и выбрать «профиль пользователя» в качестве шаблона страницы.
теперь, если все это слишком много, вы можете использовать некоторые плагины, которые вам тяжело работают:
ответил Bainternet 19 FebruaryEurope/MoscowbSat, 19 Feb 2011 04:06:30 +0300000000amSat, 19 Feb 2011 04:06:30 +030011 2011, 04:06:30