Как отредактировать профиль пользователя на лицевой стороне?

Как редактировать профиль пользователя в интерфейсе с помощью формы?
имя, фамилия, имя пользователя, адрес электронной почты и пароль

67 голосов | спросил Carson 19 FebruaryEurope/MoscowbSat, 19 Feb 2011 00:25:32 +0300000000amSat, 19 Feb 2011 00:25:32 +030011 2011, 00:25:32

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

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132