Hi there, I’ve been working on customizing the emails that WordPress Multisite sends when I add users to one of my specific sub-sites. I created the plugin, copied the wordpress pluggable wp_new_user_notification function, and I’ve been able to take care of all of the customization I wanted except for the email header. I’d like for the email to send from the email address that is the WordPress admin of that site, not the Multisite email address.
When I use this code:
if ( ! function_exists( 'wp_new_user_notification' ) ) :
/**
* Email login credentials to a newly-registered user.
*
* A new user registration notification is also sent to admin email.
*
* @since 2.0.0
* @since 4.3.0 The <code>$plaintext_pass</code> parameter was changed to <code>$notify</code>.
* @since 4.3.1 The <code>$plaintext_pass</code> parameter was deprecated. <code>$notify</code> added as a third parameter.
* @since 4.6.0 The <code>$notify</code> parameter accepts 'user' for sending notification only to the user created.
*
* @global wpdb $wpdb WordPress database object for queries.
* @global PasswordHash $wp_hasher Portable PHP password hashing framework instance.
*
* <a title=@param href=/profile/param>param</a> int $user_id User ID.
* <a title=@param href=/profile/param>param</a> null $deprecated Not used (argument deprecated).
* <a title=@param href=/profile/param>param</a> string $notify Optional. Type of notification that should happen. Accepts 'admin' or an empty
* string (admin only), 'user', or 'both' (admin and user). Default empty.
*/
function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
if ( $deprecated !== null ) {
_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;
}
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 );
if ( 'user' !== $notify ) {
$switched_locale = switch_to_locale( get_locale() );
/* translators: %s: site title */
$message = sprintf( __( 'New user registration on your site %s:' ), $blogname ) . "rnrn";
/* translators: %s: user login */
$message .= sprintf( __( 'Username: %s' ), $user->user_login ) . "rnrn";
/* translators: %s: user email address */
$message .= sprintf( __( 'Email: %s' ), $user->user_email ) . "rn";
$wp_new_user_notification_email_admin = array(
'to' => get_option( 'admin_email' ),
/* translators: Password change 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
*
* <a title=@param href=/profile/param>param</a> array $wp_new_user_notification_email {
* 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.
* }
* <a title=@param href=/profile/param>param</a> WP_User $user User object for new user.
* <a title=@param href=/profile/param>param</a> 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();
}
}
if ( 'admin' === $notify || ( empty( $deprecated ) && empty( $notify ) ) ) {
return;
}
// 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 ) );
$switched_locale = switch_to_locale( get_user_locale( $user ) );
/* translators: %s: user login */
if(wp_login_url() == 'https://secularhumanism.org/wp-login.php') {
$message = __( 'Congratulations <em>Free Inquiry</em> subscriber! An account was just created for you at <a href="https://secularhumanism.org/">https://secularhumanism.org/</a>.' ) . "rnrn";
$message .= __( 'All <em>Free Inquiry</em> print subscribers now receive a free digital subscription that grants full access to the archives. Your account is now ready, follow the instructions below to choose a password and begin reading online:' ) . "rnrn";
$message .= sprintf( __( 'Your username to login is <strong>%s</strong>' ), $user->user_login ) . "rn";
$message .= __( 'To set your password, visit the following address:' ) . "rn";
$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' ) . ">rnrn";
$message .= __( 'If you’d rather not take advantage of your free digital subscription to <em>Free Inquiry</em>, simply ignore this message and continue to enjoy the print edition of the magazine.' );
$wp_new_user_notification_email = array(
'to' => $user->user_email,
/* translators: Password change notification email subject. %s: Site title */
'subject' => __( 'Your Free Inquiry digital subscription is ready' ),
'message' => $message,
'headers' => '',
);
} else {
$message = sprintf( __( 'Username: %s' ), $user->user_login ) . "rnrn";
$message .= __( 'To set your password, visit the following address:' ) . "rnrn";
$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' ) . ">rnrn";
$message .= wp_login_url() . "rn";
$wp_new_user_notification_email = array(
'to' => $user->user_email,
/* translators: Password change notification email subject. %s: Site title */
'subject' => __( '[%s] Your username and password info' ),
'message' => $message,
'headers' => '',
);
}
/**
* Filters the contents of the new user notification email sent to the new user.
*
* @since 4.9.0
*
* <a title=@param href=/profile/param>param</a> 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.
* }
* <a title=@param href=/profile/param>param</a> WP_User $user User object for new user.
* <a title=@param href=/profile/param>param</a> 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();
}
}
endif;
Everything is fine, but as soon as I put anything in the array for ‘headers’ then the email starts showing all the html tags within. Any ideas for what I can try to customize the header?