Intereting Posts
WordPress плагин аддон WordPress permalink все еще не работает (ошибка или непонятная?) Как получить имя и значение мета-поля Пользовательская постоянная ссылка для поиска и разбивки на страницы Почему flush_rewrite_rules не запускается при активации плагина? Могу ли я назначить тему настраиваемому типу сообщений? Использование анонимных функций Почему WordPress полагается на полнофункциональный site_url с 15-ступенчатым планом перемещения сайта? Получить пароль, когда пользователь регистрируется и сохраняет его sha1 в базе данных Авто вставить пользовательский тип заголовка сообщения Аутентификация для мобильного приложения, подключенного через wp-rest api? Использование wp_handle_upload () для направления определенного пути с использованием $ overrides Удаление области «Популярные условия» на экране редактирования таксономии в области администратора Как заставить WordPress и TinyMCE принимать теги <a>, которые обертывают элементы блочного уровня, разрешенные в HTML5? Как добавить количество сообщений в wp_nav_menu?

Как вы обновляете user_email в интерфейсе WP 3.3?

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

В шаблоне:

global $current_user, $wp_roles; get_currentuserinfo(); /* Load the registration file. */ require_once( ABSPATH . WPINC . '/registration.php' ); /* If profile was saved, update profile. */ if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'update-user' ) { /* Update user password. */ if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) { if ( $_POST['pass1'] == $_POST['pass2'] ) wp_update_user( array( 'ID' => $current_user->id, 'user_pass' => esc_attr( $_POST['pass1'] ) ) ); else wp_redirect( get_permalink() . '?error' ); exit; } /* Update user information. */ 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['user_email'] ) ) update_user_meta($current_user->id, 'user_email', esc_attr( $_POST['user_email'] ) ); if ( !empty( $_POST['cell_phone'] ) ) update_user_meta( $current_user->id, 'cell_phone', esc_attr( $_POST['cell_phone'] ) ); if ( !empty( $_POST['mailing_address'] ) ) update_user_meta( $current_user->id, 'mailing_address', esc_attr( $_POST['mailing_address'] ) ); if ( !empty( $_POST['description'] ) ) update_user_meta( $current_user->id, 'description', esc_attr( $_POST['description'] ) ); /* Redirect so the page will show updated info. */ if ( !$error ) { wp_redirect( get_permalink() . '?success' ); } else { wp_redirect( get_permalink() . '?error' ); } exit; } get_header(); ?> 

И на странице:

 <?php if (stripos($_SERVER['REQUEST_URI'],'?success') !== false) { // THIS IS THE BEGINNING ?> <div class="alert alert-success" align="center">Your profile was updated successfully.</div> <?php } ?> <?php if (stripos($_SERVER['REQUEST_URI'],'?error') !== false) { // THIS IS THE BEGINNING ?> <div class="alert alert-danger" align="center">Hmm, something went wrong and your profile was not updated.</div> <?php } ?> <form method="post" id="adduser" action="<?php the_permalink(); ?>"> <table class="profile"> <tr> <td class="left"> First Name </td> <td class="right"> <input type="text" name="first_name" id="first_name" value="<?php global $current_user; get_currentuserinfo(); echo $current_user->first_name; ?>" /> </td> </tr> <tr> <td class="left"> Last Name </td> <td class="right"> <input type="text" name="last_name" id="last_name" value="<?php global $current_user; get_currentuserinfo(); echo $current_user->last_name; ?>" /> </td> </tr> <tr> <td class="left"> Email Address </td> <td class="right"> <input type="text" name="user_email" id="user_email" value="<?php global $current_user; get_currentuserinfo(); echo $current_user->user_email; ?>" /> </td> </tr> <tr> <td class="left"> Phone Number </td> <td class="right"> <input type="text" name="cell_phone" id="cell_phone" value="<?php global $current_user; get_currentuserinfo(); echo $current_user->cell_phone; ?>" /> </td> </tr> <tr> <td class="left"> Mailing Address </td> <td class="right"> <textarea name="mailing_address" id="mailing_address" rows="4" cols="30" class="regular-text"><?php global $current_user; get_currentuserinfo(); echo $current_user->mailing_address; ?></textarea> </td> </tr> <tr> <td class="left"> Business Description </td> <td class="right"> <textarea name="description" id="description" rows="4" cols="30" class="regular-text"><?php global $current_user; get_currentuserinfo(); echo $current_user->description; ?></textarea> </td> </tr> </table> <p class="form-submit"> <?php echo $referer; ?> <input name="updateuser" type="submit" id="updateuser" class="submit button" value="update-user" /> <?php wp_nonce_field( 'update-user' ) ?> <input name="action" type="hidden" id="action" value="Update" /> </p> </form> 

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

 $args = array( 'ID' => $current_user->id, 'user_email' => esc_attr( $_POST['user_email'] ) ); wp_update_user( $args ); 

Примечание: это не проверено, но оно должно работать из коробки.

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

 if (isset( $_POST['email'])) { // check if user is really updating the value if ($user_email != $_POST['email']) { // check if email is free to use if (email_exists( $_POST['email'] )){ // Email exists, do not update value. // Maybe output a warning. } else { $args = array( 'ID' => $current_user->id, 'user_email' => esc_attr( $_POST['email'] ) ); wp_update_user( $args ); } } }