I've created a front-end form which allows logged in users to change their name, email, and password. It uses the wp_update_user function for this purpose.
I am able to successfully change all these settings using this form. However, when I change the password, even though it changes successfully it gives me a series of error messages on the page:
Warning: Cannot modify header information - headers already sent by (output started at /www/client/wp-content/themes/modernedge-client/header.php:9) in /www/client/wp-includes/pluggable.php on line 717
It generates an error for lines 717-734 and 690-692. Looking at the code, these are the lines that clear and then reset cookies, respectively.
I tried temporarily working around this by commenting out the calls to the cookie functions in the wp_update_user function (which is located in wp-includes/registration.php). This removed the error messages but the password did not update properly either. I'm sure I could have cleared my browser cache manually but I don't want that to be a requirement.
I read that this error is commonly caused by white space at the beginning or end of the php files, but I couldn't find that in any of the referenced files.
Here's the code I'm using to accomplish this:
<?php
/**
* Template Name: Profile Settings -- Updated
*
*/
get_header(); ?>
<div id="content" class="withSidebar">
<!-- process POST data -->
<?php
if ( $_POST['submit-button'] )
{
include_once(ABSPATH . 'wp-includes/registration.php');
$post_firstname = $_POST['firstname'];
$post_lastname = $_POST['lastname'];
$post_email = $_POST['email'];
$post_password1 = $_POST['password1'];
$post_password2 = $_POST['password2'];
// pull current user data for comparison
$current_user = wp_get_current_user();
$new_user_data["ID"] = $current_user->ID;
if ( $post_firstname && $post_firstname !== $current_user->user_firstname )
{
$new_user_data["first_name"] = $post_firstname;
}
if ( $post_lastname && $post_lastname !== $current_user->user_lastname )
{
$new_user_data["last_name"] = $post_lastname;
}
if ( $post_email && $post_email !== $current_user->user_email )
{
$new_user_data["user_email"] = $post_email;
}
if ( $post_password1 && $post_password1 == $post_password2)
{
$new_user_data["user_pass"] = $post_password1;
}
wp_update_user( $new_user_data );
//print_r( $new_user_data );
}
?>
<?php $currentUser = wp_get_current_user(); ?>
<h1>Account Settings for <?php echo $currentUser->user_firstname . ' ' . $currentUser->user_lastname; ?></h1>
<h2>Success!</h2>
<p>Your settings have been updated.</p>
<p><a href="">Click here</a> to return to the main page, or choose from the menus or sidebar to continue.</p>
</div><!-- #content -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Can anyone tell me what's going wrong with this?
Thanks!