do_action( ‘profile_update’, int $user_id, WP_User $old_user_data, array $userdata )

Fires immediately after an existing user is updated.

Parameters

$user_idint
User ID.
$old_user_dataWP_User
Object containing user’s data prior to update.
$userdataarray
The raw array of data passed to wp_insert_user() .
More Arguments from wp_insert_user( … $userdata )An array, object, or WP_User object of user data arguments.
  • ID int
    User ID. If supplied, the user will be updated.
  • user_pass string
    The plain-text user password for new users.
    Hashed password for existing users.
  • user_login string
    The user’s login username.
  • user_nicename string
    The URL-friendly user name.
  • user_url string
    The user URL.
  • user_email string
    The user email address.
  • display_name string
    The user’s display name.
    Default is the user’s username.
  • nickname string
    The user’s nickname.
    Default is the user’s username.
  • first_name string
    The user’s first name. For new users, will be used to build the first part of the user’s display name if $display_name is not specified.
  • last_name string
    The user’s last name. For new users, will be used to build the second part of the user’s display name if $display_name is not specified.
  • description string
    The user’s biographical description.
  • rich_editing string
    Whether to enable the rich-editor for the user.
    Accepts 'true' or 'false' as a string literal, not boolean. Default 'true'.
  • syntax_highlighting string
    Whether to enable the rich code editor for the user.
    Accepts 'true' or 'false' as a string literal, not boolean. Default 'true'.
  • comment_shortcuts string
    Whether to enable comment moderation keyboard shortcuts for the user. Accepts 'true' or 'false' as a string literal, not boolean. Default 'false'.
  • admin_color string
    Admin color scheme for the user. Default 'fresh'.
  • use_ssl bool
    Whether the user should always access the admin over https. Default false.
  • user_registered string
    Date the user registered in UTC. Format is ‘Y-m-d H:i:s’.
  • user_activation_key string
    Password reset key. Default empty.
  • spam bool
    Multisite only. Whether the user is marked as spam.
    Default false.
  • show_admin_bar_front string
    Whether to display the Admin Bar for the user on the site’s front end. Accepts 'true' or 'false' as a string literal, not boolean. Default 'true'.
  • role string
    User’s role.
  • locale string
    User’s locale. Default empty.
  • meta_input array
    Array of custom user meta values keyed by meta key.
    Default empty.

Source

do_action( 'profile_update', $user_id, $old_user_data, $userdata );

Changelog

VersionDescription
5.8.0The $userdata parameter was added.
2.0.0Introduced.

User Contributed Notes

  1. Skip to note 5 content

    Finding out if a user email was updated from the admin dashboard, can work for other fields as well if value being checked is changed:

    function wpdocs_check_user_email_updated( $user_id, $old_user_data ) {
    	$old_user_email = $old_user_data->data->user_email;
    
    	$user = get_userdata( $user_id );
    	$new_user_email = $user->user_email;
    
    	if ( $new_user_email !== $old_user_email ) {
    		// Do something if old and new email aren't the same
    	}
    }
    add_action( 'profile_update', 'wpdocs_check_user_email_updated', 10, 2 );
  2. Skip to note 6 content

    Note if you’re using this hook to do a redirect once a user’s set their profile details, it can break the lost password functionality as that sends the email AFTER updating the profile with a new code. Example fix, by checking if user_activation_key has changed:

    add_action( 'profile_update', 'wpdocs_profile_update', 10, 3 );
    function wpdocs_profile_update( $user_id, $oldUserData, $newUserData ) {
        // This is also called on lost password, BEFORE the email is sent - hence breaking it. If that's the case, don't redirect.
        $doRedirect = $oldUserData->data->user_activation_key === $newUserData['user_activation_key'];
    
        if ( $doRedirect && get_option( 'wpdocs-redirect-users-to-on-login', '' ) ) {
            wp_redirect( get_option( 'wpdocs-redirect-users-to-on-login', '' ) );
            die();
        }
    }

You must log in before being able to contribute a note or feedback.