If we want to have the *reset password* form to look like this: [![reset][1]][1] then we could use the following hooks: /** * Modify the password hint */ add_filter( 'password_hint', function( $hint ) { return __( 'Use upper and lower case letters, numbers, and symbols like ! " ? $ % ^ & ).' ); } ); /** * Modify 'New password' text */ add_action( 'validate_password_reset', function( $errors ) { add_filter( 'gettext', 'wpse_gettext'); return $message; }); /** * Modify 'Log in' text */ add_action( 'resetpass_form', function() { add_filter( 'gettext', 'wpse_gettext'); }); The `wpse_gettext` helper function is defined as: function wpse_gettext( $text ) { $match = false; // Modify gettext if there's a match switch ( $text ) { case 'New password' : $text = 'Use this password, or type a new one over it'; $match = true; break; case 'Log in' : $text = 'Already registered before? Click here to log-in'; $match = true; default: } // Remove current gettext callback if there's a match if( $match ) remove_filter( current_filter(), __FUNCTION__ ); return $text; } where we remove the filter as soon as it has been used once. We also try to hook into nearby hooks to minimize the number of `gettext` checks. [1]: https://i.sstatic.net/RFpiK.jpg