Title: wp_new_user_notification
Published: April 25, 2014
Last modified: February 24, 2026

---

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

## In this article

 * [Description](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#parameters)
 * [More Information](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#more-information)
 * [Source](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#user-contributed-notes)

[ Back to top](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#wp--skip-link--target)

Emails login credentials to a newly-registered user.

## 󠀁[Description](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#description)󠁿

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

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#parameters)󠁿

 `$user_id`intrequired

User ID.

`$deprecated`nulloptional

Not used (argument deprecated).

Default:`null`

`$notify`stringoptional

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

## 󠀁[More Information](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#more-information)󠁿

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

## 󠀁[Source](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#source)󠁿

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

    	// Accepts only 'user', 'admin' , 'both' or default '' as $notify.
    	if ( ! in_array( $notify, array( 'user', 'admin', 'both', '' ), true ) ) {
    		return;
    	}

    	$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 );

    	/**
    	 * Filters whether the admin is notified of a new user registration.
    	 *
    	 * @since 6.1.0
    	 *
    	 * @param bool    $send Whether to send the email. Default true.
    	 * @param WP_User $user User object for new user.
    	 */
    	$send_notification_to_admin = apply_filters( 'wp_send_new_user_notification_to_admin', true, $user );

    	if ( 'user' !== $notify && true === $send_notification_to_admin ) {

    		$admin_user = get_user_by( 'email', get_option( 'admin_email' ) );

    		if ( $admin_user ) {
    			$switched_locale = switch_to_user_locale( $admin_user->ID );
    		} else {
    			$switched_locale = switch_to_locale( get_locale() );
    		}

    		/* translators: %s: Site title. */
    		$message = sprintf( __( 'New user registration on your site %s:' ), $blogname ) . "\r\n\r\n";
    		/* translators: %s: User login. */
    		$message .= sprintf( __( 'Username: %s' ), $user->user_login ) . "\r\n\r\n";
    		/* translators: %s: User email address. */
    		$message .= sprintf( __( 'Email: %s' ), $user->user_email ) . "\r\n";

    		$wp_new_user_notification_email_admin = array(
    			'to'      => get_option( 'admin_email' ),
    			/* translators: New user registration notification email subject. %s: Site title. */
    			'subject' => __( '[%s] New User Registration' ),
    			'message' => $message,
    			'headers' => '',
    		);

    		/**
    		 * Filters the contents of the new user notification email sent to the site admin.
    		 *
    		 * @since 4.9.0
    		 *
    		 * @param array   $wp_new_user_notification_email_admin {
    		 *     Used to build wp_mail().
    		 *
    		 *     @type string $to      The intended recipient - site admin email address.
    		 *     @type string $subject The subject of the email.
    		 *     @type string $message The body of the email.
    		 *     @type string $headers The headers of the email.
    		 * }
    		 * @param WP_User $user     User object for new user.
    		 * @param string  $blogname The site title.
    		 */
    		$wp_new_user_notification_email_admin = apply_filters( 'wp_new_user_notification_email_admin', $wp_new_user_notification_email_admin, $user, $blogname );

    		wp_mail(
    			$wp_new_user_notification_email_admin['to'],
    			wp_specialchars_decode( sprintf( $wp_new_user_notification_email_admin['subject'], $blogname ) ),
    			$wp_new_user_notification_email_admin['message'],
    			$wp_new_user_notification_email_admin['headers']
    		);

    		if ( $switched_locale ) {
    			restore_previous_locale();
    		}
    	}

    	/**
    	 * Filters whether the user is notified of their new user registration.
    	 *
    	 * @since 6.1.0
    	 *
    	 * @param bool    $send Whether to send the email. Default true.
    	 * @param WP_User $user User object for new user.
    	 */
    	$send_notification_to_user = apply_filters( 'wp_send_new_user_notification_to_user', true, $user );

    	// `$deprecated` was pre-4.3 `$plaintext_pass`. An empty `$plaintext_pass` didn't sent a user notification.
    	if ( 'admin' === $notify || true !== $send_notification_to_user || ( empty( $deprecated ) && empty( $notify ) ) ) {
    		return;
    	}

    	$key = get_password_reset_key( $user );
    	if ( is_wp_error( $key ) ) {
    		return;
    	}

    	$switched_locale = switch_to_user_locale( $user_id );

    	/* translators: %s: 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";

    	/*
    	 * Since some user login names end in a period, this could produce ambiguous URLs that
    	 * end in a period. To avoid the ambiguity, ensure that the login is not the last query
    	 * arg in the URL. If moving it to the end, a trailing period will need to be escaped.
    	 *
    	 * @see https://core.trac.wordpress.org/tickets/42957
    	 */
    	$message .= network_site_url( 'wp-login.php?login=' . rawurlencode( $user->user_login ) . "&key=$key&action=rp", 'login' ) . "\r\n\r\n";

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

    	$wp_new_user_notification_email = array(
    		'to'      => $user->user_email,
    		/* translators: Login details notification email subject. %s: Site title. */
    		'subject' => __( '[%s] Login Details' ),
    		'message' => $message,
    		'headers' => '',
    	);

    	/**
    	 * Filters the contents of the new user notification email sent to the new user.
    	 *
    	 * @since 4.9.0
    	 *
    	 * @param array   $wp_new_user_notification_email {
    	 *     Used to build wp_mail().
    	 *
    	 *     @type string $to      The intended recipient - New user email address.
    	 *     @type string $subject The subject of the email.
    	 *     @type string $message The body of the email.
    	 *     @type string $headers The headers of the email.
    	 * }
    	 * @param WP_User $user     User object for new user.
    	 * @param string  $blogname The site title.
    	 */
    	$wp_new_user_notification_email = apply_filters( 'wp_new_user_notification_email', $wp_new_user_notification_email, $user, $blogname );

    	wp_mail(
    		$wp_new_user_notification_email['to'],
    		wp_specialchars_decode( sprintf( $wp_new_user_notification_email['subject'], $blogname ) ),
    		$wp_new_user_notification_email['message'],
    		$wp_new_user_notification_email['headers']
    	);

    	if ( $switched_locale ) {
    		restore_previous_locale();
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/pluggable.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/pluggable.php#L2266)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/pluggable.php#L2266-L2422)

## 󠀁[Hooks](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#hooks)󠁿

 [apply_filters( ‘wp_new_user_notification_email’, array $wp_new_user_notification_email, WP_User $user, string $blogname )](https://developer.wordpress.org/reference/hooks/wp_new_user_notification_email/)

Filters the contents of the new user notification email sent to the new user.

 [apply_filters( ‘wp_new_user_notification_email_admin’, array $wp_new_user_notification_email_admin, WP_User $user, string $blogname )](https://developer.wordpress.org/reference/hooks/wp_new_user_notification_email_admin/)

Filters the contents of the new user notification email sent to the site admin.

 [apply_filters( ‘wp_send_new_user_notification_to_admin’, bool $send, WP_User $user )](https://developer.wordpress.org/reference/hooks/wp_send_new_user_notification_to_admin/)

Filters whether the admin is notified of a new user registration.

 [apply_filters( ‘wp_send_new_user_notification_to_user’, bool $send, WP_User $user )](https://developer.wordpress.org/reference/hooks/wp_send_new_user_notification_to_user/)

Filters whether the user is notified of their new user registration.

## 󠀁[Related](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#related)󠁿

| Uses | Description | 
| [switch_to_user_locale()](https://developer.wordpress.org/reference/functions/switch_to_user_locale/)`wp-includes/l10n.php` |

Switches the translations according to the given user’s locale.

  | 
| [restore_previous_locale()](https://developer.wordpress.org/reference/functions/restore_previous_locale/)`wp-includes/l10n.php` |

Restores the translations according to the previous locale.

  | 
| [switch_to_locale()](https://developer.wordpress.org/reference/functions/switch_to_locale/)`wp-includes/l10n.php` |

Switches the translations according to the given locale.

  | 
| [get_password_reset_key()](https://developer.wordpress.org/reference/functions/get_password_reset_key/)`wp-includes/user.php` |

Creates, stores, then returns a password reset key for user.

  | 
| [get_locale()](https://developer.wordpress.org/reference/functions/get_locale/)`wp-includes/l10n.php` |

Retrieves the current locale.

  | 
| [wp_specialchars_decode()](https://developer.wordpress.org/reference/functions/wp_specialchars_decode/)`wp-includes/formatting.php` |

Converts a number of HTML entities into their special characters.

  | 
| [get_user_by()](https://developer.wordpress.org/reference/functions/get_user_by/)`wp-includes/pluggable.php` |

Retrieves user info by a given field.

  | 
| [wp_mail()](https://developer.wordpress.org/reference/functions/wp_mail/)`wp-includes/pluggable.php` |

Sends an email, similar to PHP’s mail function.

  | 
| [wp_login_url()](https://developer.wordpress.org/reference/functions/wp_login_url/)`wp-includes/general-template.php` |

Retrieves the login URL.

  | 
| [network_site_url()](https://developer.wordpress.org/reference/functions/network_site_url/)`wp-includes/link-template.php` |

Retrieves the site URL for the current network.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  | 
| [get_userdata()](https://developer.wordpress.org/reference/functions/get_userdata/)`wp-includes/pluggable.php` |

Retrieves user info by user ID.

  | 
| [_deprecated_argument()](https://developer.wordpress.org/reference/functions/_deprecated_argument/)`wp-includes/functions.php` |

Marks a function argument as deprecated and inform when it has been used.

  | 
| [apply_filters()](https://developer.wordpress.org/reference/functions/apply_filters/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to a filter hook.

  | 
| [get_option()](https://developer.wordpress.org/reference/functions/get_option/)`wp-includes/option.php` |

Retrieves an option value based on an option name.

  | 
| [is_wp_error()](https://developer.wordpress.org/reference/functions/is_wp_error/)`wp-includes/load.php` |

Checks whether the given variable is a WordPress Error.

  |

[Show 11 more](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#)

| Used by | Description | 
| [wp_send_new_user_notifications()](https://developer.wordpress.org/reference/functions/wp_send_new_user_notifications/)`wp-includes/user.php` |

Initiates email notifications related to the creation of new users.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#changelog)󠁿

| Version | Description | 
| [4.6.0](https://developer.wordpress.org/reference/since/4.6.0/) | The `$notify` parameter accepts `'user'` for sending notification only to the user created. | 
| [4.3.1](https://developer.wordpress.org/reference/since/4.3.1/) | The `$plaintext_pass` parameter was deprecated. `$notify` added as a third parameter. | 
| [4.3.0](https://developer.wordpress.org/reference/since/4.3.0/) | The `$plaintext_pass` parameter was changed to `$notify`. | 
| [2.0.0](https://developer.wordpress.org/reference/since/2.0.0/) | Introduced. |

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#user-contributed-notes)󠁿

 1.   [Skip to note 4 content](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#comment-content-3130)
 2.    [Jose Lazo](https://profiles.wordpress.org/jose-lazo/)  [  7 years ago  ](https://developer.wordpress.org/reference/functions/wp_new_user_notification/#comment-3130)
 3.  [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%23comment-3130)
     Vote results for this note: 4[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%23comment-3130)
 4.  Now is pluggable, so you can add in your functions.php with a `add_filter`
 5.  `@since 4.9.0`
 6.      ```php
         /**
          * Custom register email
          */
         add_filter( 'wp_new_user_notification_email', 'custom_wp_new_user_notification_email', 10, 3 );
         function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
     
         	$user_login = stripslashes( $user->user_login );
         	$user_email = stripslashes( $user->user_email );
         	$login_url	= wp_login_url();
         	$message  = __( 'Hi there,' ) . "/r/n/r/n";
         	$message .= sprintf( __( "Welcome to %s! Here's how to log in:" ), get_option('blogname') ) . "/r/n/r/n";
         	$message .= wp_login_url() . "/r/n";
         	$message .= sprintf( __('Username: %s'), $user_login ) . "/r/n";
         	$message .= sprintf( __('Email: %s'), $user_email ) . "/r/n";
         	$message .= __( 'Password: The one you entered in the registration form. (For security reason, we save encripted password)' ) . "/r/n/r/n";
         	$message .= sprintf( __('If you have any problems, please contact me at %s.'), get_option('admin_email') ) . "/r/n/r/n";
         	$message .= __( 'bye!' );
     
         	$wp_new_user_notification_email['subject'] = sprintf( '[%s] Your credentials.', $blogname );
         	$wp_new_user_notification_email['headers'] = array('Content-Type: text/html; charset=UTF-8');
         	$wp_new_user_notification_email['message'] = $message;
     
         	return $wp_new_user_notification_email;
         }
         ```
     
 7.   * For the HTML email format, replace each `/r/n` with `<br/>` to print line breaks
        in the email template.
      * [Claudio](https://profiles.wordpress.org/cl4udio/) [5 years ago](https://developer.wordpress.org/reference/functions/wp_new_user_notification/#comment-5203)
 8.   [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%3Freplytocom%3D3130%23feedback-editor-3130)
 9.   [Skip to note 5 content](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#comment-content-2484)
 10.   [MisterR](https://profiles.wordpress.org/mister_r/)  [  8 years ago  ](https://developer.wordpress.org/reference/functions/wp_new_user_notification/#comment-2484)
 11. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%23comment-2484)
     Vote results for this note: 3[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%23comment-2484)
 12.  Use the [wp_new_user_notification_email](https://developer.wordpress.org/reference/hooks/wp_new_user_notification_email/)
     filter to change the notification subject/message.
 13. @since 4.9.0
 14. More info in `wp-includes/pluggable.php`
 15.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%3Freplytocom%3D2484%23feedback-editor-2484)
 16.  [Skip to note 6 content](https://developer.wordpress.org/reference/functions/wp_new_user_notification/?output_format=md#comment-content-1630)
 17.   [mit2sumit](https://profiles.wordpress.org/mit2sumit/)  [  10 years ago  ](https://developer.wordpress.org/reference/functions/wp_new_user_notification/#comment-1630)
 18. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%23comment-1630)
     Vote results for this note: -8[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%23comment-1630)
 19. 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](https://codex.wordpress.org/Must_Use_Plugins)
 20.     ```php
         // 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) )
                     return;
     
                 $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);
     
             }
         }
         ```
     
 21.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F%3Freplytocom%3D1630%23feedback-editor-1630)

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_new_user_notification%2F)
before being able to contribute a note or feedback.