wp_new_user_notification()WP 2.0.0

Notifies by email the site administrator about new user registration, and sends the user an email with a login and password.

This function automatically triggers by another function wp_send_new_user_notifications() which is hooked on register_new_user hook by default in WordPress:

add_action('register_new_user', 'wp_send_new_user_notifications' );

See also Emails In WordPress.

Pluggable function — this function can be replaced from a plugin. It means that this function is defined (works) only after all plugins are loaded (included), but before this moment this function has not defined. Therefore, you cannot call this and all functions depended on this function directly from a plugin code. They need to be called on plugins_loaded hook or later, for example on init hook.

Function replacement (override) — in must-use or regular plugin you can create a function with the same name, then it will replace this function.

Uses: wp_mail()

Return

null. Nothing (null).

Usage

wp_new_user_notification( $user_id, $deprecated, $notify );
$user_id(int) (required)
User ID.
$deprecated(null)
Not used (argument deprecated).
Default: null
$notify(string)
Type of notification that should happen. Accepts 'admin' or an empty string (admin only), 'user', or 'both' (admin and user).
Default: ''

Examples

0

#1 Notify an administrator and the user.

Suppose, when registering a user, you need to notify yourself (you are the admin) and send an email to the new user by email with a link to set a new password:

$new_user_id = 8;

wp_new_user_notification( $new_user_id, 'both' );

In the result, the admin will get an email:

New user registration on your site Example:

Username: user

Email: [email protected]

The user will get:

Username: user

To set your password, visit the following address:

<http://example.com/wp-login.php?action=rp&key=1ORsgCiUtZdwDw3tss4U&login=user>

http://example.com/wp-login.php

Changelog

Since 2.0.0 Introduced.
Since 4.3.0 The $plaintext_pass parameter was changed to $notify.
Since 4.3.1 The $plaintext_pass parameter was deprecated. $notify added as a third parameter.
Since 4.6.0 The $notify parameter accepts 'user' for sending notification only to the user created.

wp_new_user_notification() code WP 6.5.2

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 ) {
		$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";
	$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_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();
	}
}