web-dev-qa-db-fra.com

Personnalisez le "Enregistrement terminé. Vérifiez votre adresse e-mail." message sur WP 4.0

Comment personnalisons-nous le "Enregistrement terminé. Vérifiez votre adresse e-mail." message qui apparaît lors de l'inscription sur WordPress 4.0? Dans les versions précédentes, Dave Ross la solution fonctionnait:

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;
}

En parcourant wp-login.php, aucune modification n'a été apportée à l'information Filter the login page errors. Pourquoi le code ci-dessus ne fonctionne-t-il pas dans WP 4?

1
Christine Cooper

Si vous avez besoin d'une autre manière, vous pouvez toujours vous connecter au login_init et modifier le filtre gettext:

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;
}

Mise à jour - La classe WP_Error a changé:

Il semble y avoir un changement dans la définition de la propriété errors de la classe WP_Errors:

Dans WordPress version 3.9 nous avons cette partie:

var $errors = array();

mais dans WordPress version 4.0 il a été changé en:

private $error_data = array();

La portée de cette propriété a donc été modifiée de public à private .

C'est la raison pour laquelle vousne pouvez pas le modifierdirectement dans WordPress 4.0+.

... mais vous pouvez plutôt utiliser les méthodes magiques __set et __get de la WP_Error classe introduite dans WordPress 4.0.

Ensuite, votre exemple de code pourrait être modifié pour:

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;
}

pour changer ce message d'erreur particulier.

Voici des exemples de captures d'écran:

Avant:

Before

Après:

After

3
birgire