WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is it possible to hook in and override the default notification message for WP MS? I know the message being sent out is in /wp-admin/user-new.php

if ( is_multisite() ) {
    function admin_created_user_email( $text ) {
        /* translators: 1: Site name, 2: site URL, 3: role */
        return sprintf( __( 'Hi,
You\'ve been invited to join \'%1$s\' at
%2$s as a %3$s.
If you do not want to join this site please ignore
this email. This invitation will expire in a few days.

Please click the following link to activate your user account:
%%s' ), get_bloginfo('name'), site_url(), esc_html( $_REQUEST[ 'role' ] ) );
    add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' );

    function admin_created_user_subject( $text ) {
        return "[" . get_bloginfo('name') . "] Your site invite";

I believe I can do it if I can find the right hook in so that I can remove_filter() and then add my own in. I had been toying with the following (admin_created_user_email2 is my new function):

function reset_admin_email(){
    remove_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' );
    add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email2', 1 );

I was reading this page that lists the actions/hooks I can tie into, but I can't figure out which one to use (if any of them will even work)

Does anyone have experience with this to point me in the right direction?


share|improve this question
Thanks for sharing code guys, but none of these worked, I tried all of them on multisite. Has anyone gotten any of these to work? – user19598 Aug 23 '12 at 10:22

I was able to override the multi-site notification email by adding these:


Adding the three filters at bottom i.e. email,notification and subject allows you to override the content and the subject of the email.

share|improve this answer

@user2647 seems to be on the right path, but I think that this is more correct:

remove_action( 'wpmu_new_user', 'newuser_notify_siteadmin' );
add_action( 'wpmu_new_user', 'my_notification' );

function my_notification ($user_id) {
  // Make your custom notification here.
share|improve this answer

remove_filter has no effect because /wp-admin/user-new.php runs

add_filter('wpmu_signup_user_notification_email', admin_created_user_email);

every time it loads, after plugins_loaded.

I got this to work by adding a new filter with a lower priority (higher number), so it runs after admin_created_user_email, which has the default priority (10):

function reset_admin_email(){
    add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email2', 11 );
share|improve this answer

Would this kind of thing work?

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 = $user_login . " " . $user_email;

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

share|improve this answer

Dylan has the correct answer but to elaborate.

Add a filter that fires after the default one using a higher priority then 10:

add_filter( 'wpmu_signup_user_notification_email', 'wp_new_user_notification', 11 );

The function for the content:

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 %s:'), get_option('blogname') ) . "\r\n\r\n";
            $message .= sprintf( __('Username: %s'), $user_login ) . "\r\n\r\n";
            $message .= sprintf( __('E-mail: %s'), $user_email ) . "\r\n";

                sprintf(__('[%s] New User Registration'), get_option('blogname') ),

            if ( empty( $plaintext_pass ) )

            $message  = __('Hi there,') . "\r\n\r\n";
            $message .= sprintf( __("Welcomeeee 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( __('Password: %s'), $plaintext_pass ) . "\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 .= __('Adios!');

                sprintf( __('[%s] Yourrrrrrr username and password'), get_option('blogname') ),
  • This code is a copy paste from Codex example.
  • Referenced directly in core here.

Finally drop it into the mu-plugins folder wp-content/mu-plugins

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.