Search code examples
phpwordpressuser-input

Why cannot update a WordPress user?


I am creating a template, where the user can update his/her details.

 /* Load the registration file. */
 require_once( ABSPATH . WPINC . '/registration.php' ); //deprecated since 
 3.1
$error = array();    
 /* 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
        $error[] = __('The passwords you entered do not match.  Your password was not updated.', 'profile');
}

/* Update user information. */
if ( !empty( $_POST['url'] ) )
    wp_update_user( array( 'ID' => $current_user->ID, 'user_url' => esc_url( $_POST['url'] ) ) );
if ( !empty( $_POST['email'] ) ){
    if (!is_email(esc_attr( $_POST['email'] )))
        $error[] = __('The Email you entered is not valid.  please try again.', 'profile');
    elseif(email_exists(esc_attr( $_POST['email'] )) != $current_user->id )
        $error[] = __('This email is already used by another user.  try a different one.', 'profile');
    else{
        wp_update_user( array ('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 ) {
    //action hook for plugins and extra fields saving
    do_action('edit_user_profile_update', $current_user->ID);
    wp_redirect('http://localhost:81/DEMO/profile/' );
    exit;
}
}
  ?>

After pressing update the data is changed, but I am getting this warning:

Warning: Cannot modify header information - headers already sent by (output started at C:\xamp\htdocs\DEMO\wp-includes\general-template.php:2768) in C:\xamp\htdocs\DEMO\wp-includes\pluggable.php on line 1216

What could be the reason?


Solution

  • Add this code in wp-config.php on the first line:

    ob_start();
    error_reporting(0);
    

    (This error) is usually because there are spaces, new lines, or other stuff before an opening <?php tag or after a closing ?> tag, typically in wp-config.php