Customize the “Registration complete. Please check your e-mail.” message on WP 4.0

How do we customize the “Registration complete. Please check your e-mail.” message that appears when registering on WordPress 4.0? In previous versions, Dave Ross solution worked:

add_filter( 'wp_login_errors', 'override_reg_complete_msg', 10, 2 );
function override_reg_complete_msg( $errors, $redirect_to ) {
   if( isset( $errors->errors['registered'] ) ) {
     $needle = __('Registration complete. Please check your e-mail.');
     foreach( $errors->errors['registered'] as $index => $msg ) {
       if( $msg === $needle ) {
         $errors->errors['registered'][$index] = 'Your new message';
       }
     }
   }

   return $errors;
}

Looking through wp-login.php, no changes have been made to the Filter the login page errors info. Why is the above code not working in WP 4?

1 Answer
1

If you need an alternative way, you can always hook into the login_init and modify the gettext filter:

add_filter( 'login_init',
    function()
    {
      add_filter( 'gettext', 'wpse_161709', 99, 3 );
    }
);

function wpse_161709( $translated_text, $untranslated_text, $domain )
{
    $old = "Registration complete. Please check your e-mail.";
    $new = "New text here";

    if ( $untranslated_text === $old )
    {         
        $translated_text = $new;
        remove_filter( current_filter(), __FUNCTION__ );
    }
    return $translated_text;
}

Update — The WP_Error class has changed:

There seems to be a change in the definition of the errors property of the WP_Errors class:

In WordPress version 3.9 we got this part:

var $errors = array();

but in WordPress version 4.0 it has been changed to:

private $error_data = array();

So the scope of this property has been changed from public to private.

That’s the reason why you can’t modify it directly in WordPress 4.0+.

… but you can instead use the magic __set and __get methods of the WP_Error class introduced in WordPress 4.0.

Then your code example could be modified to:

add_filter( 'wp_login_errors', 'wpse_161709', 10, 2 );

function wpse_161709( $errors, $redirect_to )
{
   if( isset( $errors->errors['registered'] ) )
   {
     // Use the magic __get method to retrieve the errors array:
     $tmp = $errors->errors;   

     // What text to modify:
     $old = __('Registration complete. Please check your email.');
     $new = 'Your new message';

     // Loop through the errors messages and modify the corresponding message:
     foreach( $tmp['registered'] as $index => $msg )
     {
       if( $msg === $old )
           $tmp['registered'][$index] = $new;        
     }
     // Use the magic __set method to override the errors property:
     $errors->errors = $tmp;

     // Cleanup:
     unset( $tmp );
   }  
   return $errors;
}

to change this particular error message.

Here are screenshot examples:

Before:

Before

After:

After

Leave a Comment