1

I am want to re-ride core function wp_update_user()

In this function there is text This notice confirms that your password was changed on ###SITENAME###. that i want replace with some other word.

I have tried to re-ride as

function wp_update_user($userdata) {
    if ( $userdata instanceof stdClass ) {
        $userdata = get_object_vars( $userdata );
    } elseif ( $userdata instanceof WP_User ) {
        $userdata = $userdata->to_array();
    }

    $ID = isset( $userdata['ID'] ) ? (int) $userdata['ID'] : 0;
    if ( ! $ID ) {
        return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) );
    }

    // First, get all of the original fields
    $user_obj = get_userdata( $ID );
    if ( ! $user_obj ) {
        return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) );
    }

    $user = $user_obj->to_array();

    // Add additional custom fields
    foreach ( _get_additional_user_keys( $user_obj ) as $key ) {
        $user[ $key ] = get_user_meta( $ID, $key, true );
    }

    // Escape data pulled from DB.
    $user = add_magic_quotes( $user );

    if ( ! empty($userdata['user_pass']) ) {
        // If password is changing, hash it now
        $plaintext_pass = $userdata['user_pass'];
        $userdata['user_pass'] = wp_hash_password( $userdata['user_pass'] );

        /**
         * Filter whether to send the password change email.
         *
         * @since 4.3.0
         *
         * @see wp_insert_user() For `$user` and `$userdata` fields.
         *
         * @param bool  $send     Whether to send the email.
         * @param array $user     The original user array.
         * @param array $userdata The updated user array.
         *
         */
        $send_password_change_email = apply_filters( 'send_password_change_email', true, $user, $userdata );
    }

    if ( isset( $userdata['user_email'] ) && $user['user_email'] !== $userdata['user_email'] ) {
        /**
         * Filter whether to send the email change email.
         *
         * @since 4.3.0
         *
         * @see wp_insert_user() For `$user` and `$userdata` fields.
         *
         * @param bool  $send     Whether to send the email.
         * @param array $user     The original user array.
         * @param array $userdata The updated user array.
         *
         */
        $send_email_change_email = apply_filters( 'send_email_change_email', true, $user, $userdata );
    }

    wp_cache_delete( $user['user_email'], 'useremail' );

    // Merge old and new fields with new fields overwriting old ones.
    $userdata = array_merge( $user, $userdata );
    $user_id = wp_insert_user( $userdata );

    if ( ! is_wp_error( $user_id ) ) {

        $blog_name = wp_specialchars_decode( get_option( 'blogname' ) );

        if ( ! empty( $send_password_change_email ) ) {

            /* translators: Do not translate USERNAME, ADMIN_EMAIL, EMAIL, SITENAME, SITEURL: those are placeholders. */
            $pass_change_text = __( 'Hi ###USERNAME###,

This notice confirms that your password was changed on ###SITENAME###.

If you did not change your password, please contact the Site Administrator at
###ADMIN_EMAIL###

This email has been sent to ###EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###' );

            $pass_change_email = array(
                'to'      => $user['user_email'],
                'subject' => __( '[%s] Notice of Password Change' ),
                'message' => $pass_change_text,
                'headers' => '',
            );

            /**
             * Filter the contents of the email sent when the user's password is changed.
             *
             * @since 4.3.0
             *
             * @param array $pass_change_email {
             *            Used to build wp_mail().
             *            @type string $to      The intended recipients. Add emails in a comma separated string.
             *            @type string $subject The subject of the email.
             *            @type string $message The content of the email.
             *                The following strings have a special meaning and will get replaced dynamically:
             *                - ###USERNAME###    The current user's username.
             *                - ###ADMIN_EMAIL### The admin email in case this was unexpected.
             *                - ###EMAIL###       The old email.
             *                - ###SITENAME###    The name of the site.
             *                - ###SITEURL###     The URL to the site.
             *            @type string $headers Headers. Add headers in a newline (\r\n) separated string.
             *        }
             * @param array $user     The original user array.
             * @param array $userdata The updated user array.
             *
             */
            $pass_change_email = apply_filters( 'password_change_email', $pass_change_email, $user, $userdata );

            $pass_change_email['message'] = str_replace( '###USERNAME###', $user['user_login'], $pass_change_email['message'] );
            $pass_change_email['message'] = str_replace( '###ADMIN_EMAIL###', get_option( 'admin_email' ), $pass_change_email['message'] );
            $pass_change_email['message'] = str_replace( '###EMAIL###', $user['user_email'], $pass_change_email['message'] );
            $pass_change_email['message'] = str_replace( '###SITENAME###', get_option( 'blogname' ), $pass_change_email['message'] );
            $pass_change_email['message'] = str_replace( '###SITEURL###', get_option( 'siteurl' ), $pass_change_email['message'] );

            wp_mail( $pass_change_email['to'], sprintf( $pass_change_email['subject'], $blog_name ), $pass_change_email['message'], $pass_change_email['headers'] );
        }

        if ( ! empty( $send_email_change_email ) ) {
            /* translators: Do not translate USERNAME, ADMIN_EMAIL, EMAIL, SITENAME, SITEURL: those are placeholders. */
            $email_change_text = __( 'Hi ###USERNAME###,

This notice confirms that your email was changed on ###SITENAME###.

If you did not change your email, please contact the Site Administrator at
###ADMIN_EMAIL###

This email has been sent to ###EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###' );

            $email_change_email = array(
                'to'      => $user['user_email'],
                'subject' => __( '[%s] Notice of Email Change' ),
                'message' => $email_change_text,
                'headers' => '',
            );

            /**
             * Filter the contents of the email sent when the user's email is changed.
             *
             * @since 4.3.0
             *
             * @param array $email_change_email {
             *            Used to build wp_mail().
             *            @type string $to      The intended recipients.
             *            @type string $subject The subject of the email.
             *            @type string $message The content of the email.
             *                The following strings have a special meaning and will get replaced dynamically:
             *                - ###USERNAME###    The current user's username.
             *                - ###ADMIN_EMAIL### The admin email in case this was unexpected.
             *                - ###EMAIL###       The old email.
             *                - ###SITENAME###    The name of the site.
             *                - ###SITEURL###     The URL to the site.
             *            @type string $headers Headers.
             *        }
             * @param array $user The original user array.
             * @param array $userdata The updated user array.
             */
            $email_change_email = apply_filters( 'email_change_email', $email_change_email, $user, $userdata );

            $email_change_email['message'] = str_replace( '###USERNAME###', $user['user_login'], $email_change_email['message'] );
            $email_change_email['message'] = str_replace( '###ADMIN_EMAIL###', get_option( 'admin_email' ), $email_change_email['message'] );
            $email_change_email['message'] = str_replace( '###EMAIL###', $user['user_email'], $email_change_email['message'] );
            $email_change_email['message'] = str_replace( '###SITENAME###', get_option( 'blogname' ), $email_change_email['message'] );
            $email_change_email['message'] = str_replace( '###SITEURL###', get_option( 'siteurl' ), $email_change_email['message'] );

            wp_mail( $email_change_email['to'], sprintf( $email_change_email['subject'], $blog_name ), $email_change_email['message'], $email_change_email['headers'] );
        }
    }

    // Update the cookies if the password changed.
    $current_user = wp_get_current_user();
    if ( $current_user->ID == $ID ) {
        if ( isset($plaintext_pass) ) {
            wp_clear_auth_cookie();

            // Here we calculate the expiration length of the current auth cookie and compare it to the default expiration.
            // If it's greater than this, then we know the user checked 'Remember Me' when they logged in.
            $logged_in_cookie    = wp_parse_auth_cookie( '', 'logged_in' );
            /** This filter is documented in wp-includes/pluggable.php */
            $default_cookie_life = apply_filters( 'auth_cookie_expiration', ( 2 * DAY_IN_SECONDS ), $ID, false );
            $remember            = ( ( $logged_in_cookie['expiration'] - time() ) > $default_cookie_life );

            wp_set_auth_cookie( $ID, $remember );
        }
    }

    return $user_id;
}

and add_filter('wp_update_user', 'wp_update_user', 1, 2);

But show error like that you can not re-declare that function again.

So please help me

5

If I understand you correctly, then you only want to change the text of the mail. This you can do via the filter hook password_change_email. No need to redeclare the function, which you actually can't do. Below you find an example on how to use the password_change_email filter to change your message text.

add_filter( 
  'password_change_email', 
  'wpse207879_change_password_mail_message', 
  10, 
  3 
);
function wpse207879_change_password_mail_message( 
  $pass_change_mail, 
  $user, 
  $userdata 
) {
  $new_message_txt = __( 'Some text ###USERNAME### more text
    even more text ###EMAIL### more text after more text
    last bit of text ###SITENAME###' );
  $pass_change_mail[ 'message' ] = $new_message_txt;
  return $pass_change_mail;
}

I've tested this and it works. Just to clarify, this applies to the use case, in which one changes and updates the password via the backend user management.

  • Sorry but it still not working. after adding this is themes function files not showing any error but forget password and change password text is still same as default – Shiv Singh Nov 9 '15 at 12:44
  • Are you using WP 4.3+? @srapsware – Nicolai Nov 9 '15 at 12:51
  • Yes i am using 4.3.1 version. – Shiv Singh Nov 9 '15 at 12:59
  • Yes now i have tested on a new other WordPress site and found its working . i have installed a WP-profile manager plugin why which it was not working. its working without plugin . Any way thanks – Shiv Singh Nov 9 '15 at 13:31
  • @srapsware My pleasure! – Nicolai Nov 9 '15 at 13:32

protected by Community Jul 3 '18 at 17:03

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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