wp_new_user_notification( int $user_id, null $deprecated = null, string $notify = '' )

Email login credentials to a newly-registered user.

Description Description

A new user registration notification is also sent to admin email.

Parameters Parameters


(int) (Required) User ID.


(null) (Optional) Not used (argument deprecated).

Default value: null


(string) (Optional) Type of notification that should happen. Accepts 'admin' or an empty string (admin only), or 'both' (admin and user).

Default value: ''

Top ↑

Source Source

File: wp-includes/pluggable.php

function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
	if ( $deprecated !== null ) {
		_deprecated_argument( __FUNCTION__, '4.3.1' );

	global $wpdb, $wp_hasher;
	$user = get_userdata( $user_id );

	// The blogname option is escaped with esc_html on the way into the database in sanitize_option
	// we want to reverse this for the plain text arena of emails.
	$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

	$message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
	$message .= sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
	$message .= sprintf(__('Email: %s'), $user->user_email) . "\r\n";

	@wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);

	// `$deprecated was pre-4.3 `$plaintext_pass`. An empty `$plaintext_pass` didn't sent a user notifcation.
	if ( 'admin' === $notify || ( empty( $deprecated ) && empty( $notify ) ) ) {

	// Generate something random for a password reset key.
	$key = wp_generate_password( 20, false );

	/** This action is documented in wp-login.php */
	do_action( 'retrieve_password_key', $user->user_login, $key );

	// Now insert the key, hashed, into the DB.
	if ( empty( $wp_hasher ) ) {
		require_once ABSPATH . WPINC . '/class-phpass.php';
		$wp_hasher = new PasswordHash( 8, true );
	$hashed = time() . ':' . $wp_hasher->HashPassword( $key );
	$wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );

	$message = sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
	$message .= __('To set your password, visit the following address:') . "\r\n\r\n";
	$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";

	$message .= wp_login_url() . "\r\n";

	wp_mail($user->user_email, sprintf(__('[%s] Your username and password info'), $blogname), $message);

Top ↑

Changelog Changelog

Version Description
4.3.1 The $plaintext_pass parameter was deprecated. $notify added as a third parameter.
4.3.0 The $plaintext_pass parameter was changed to $notify.
2.0.0 Introduced.

Top ↑

More Information More Information

  • This function can be replaced via plugins. If plugins do not redefine these functions, then this will be used instead.

Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note content
    Contributed by mit2sumit

    After you insert new user with wp_insert_user(), you can call this wp_new_user_notification() function to send mail for newly registered users.
    However, In order to customise them, you need to define this function and save it as a plugin of its own. But, it still have a chance that some other plugin (that is called before this) have control over it. So, the best way of customising it is saving it as a mu-plugin. Just create a folder ‘mu-plugins’ under wp-content and save it under a php filename.
    Read more about mu-plugin here: https://codex.wordpress.org/Must_Use_Plugins

    // Redefine user notification function
    if ( !function_exists('wp_new_user_notification') ) {
        function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
            $user = new WP_User($user_id);
            $user_login = stripslashes($user->user_login);
            $user_email = stripslashes($user->user_email);
            $message  = sprintf(__('New user registration on your blog %s:'), get_option('blogname')) . "rnrn";
            $message .= sprintf(__('Username: %s'), $user_login) . "rnrn";
            $message .= sprintf(__('E-mail: %s'), $user_email) . "rn";
            @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), get_option('blogname')), $message);
            if ( empty($plaintext_pass) )
            $message  = __('Hi there,') . "rnrn";
            $message .= sprintf(__("Welcome to %s! Here's how to log in:"), get_option('blogname')) . "rnrn";
            $message .= wp_login_url() . "rn";
            $message .= sprintf(__('Username: %s'), $user_login) . "rn";
            $message .= sprintf(__('Password: %s'), $plaintext_pass) . "rnrn";
            $message .= sprintf(__('If you have any problems, please contact me at %s.'), get_option('admin_email')) . "rnrn";
            $message .= __('Adios!');
            wp_mail($user_email, sprintf(__('[%s] Your username and password'), get_option('blogname')), $message);

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